1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
|
// RUN: %target-typecheck-verify-swift -enable-builtin-module -debug-constraints > %t.log 2>&1
// RUN: %FileCheck %s < %t.log
import Builtin
func takeDoubleAndBool(_: Double, _: Bool) { }
func testTernaryOneWay(b: Bool, b2: Bool) {
// CHECK: ---Connected components---
// CHECK-NEXT: 3: $T{{[0-9]+}} depends on 1
// CHECK-NEXT: 1: $T{{[0-9]+}} $T{{[0-9]+}} $T{{[0-9]+}} depends on 0, 2
// CHECK-NEXT: 2: $T{{[0-9]+}}
// CHECK-NEXT: 0: $T{{[0-9]+}}
// CHECK-NEXT: 4: $T{{[0-9]+}} $T{{[0-9]+}} $T{{[0-9]+}}
takeDoubleAndBool(
Builtin.one_way(
b ? Builtin.one_way(3.14159) : Builtin.one_way(2.71828)),
b == true)
}
func int8Or16(_ x: Int8) -> Int8 { return x }
func int8Or16(_ x: Int16) -> Int16 { return x }
func testTernaryOneWayOverload(b: Bool) {
// CHECK: ---Connected components---
// CHECK: 1: [[A:\$T[0-9]+]] [[B:\$T[0-9]+]] [[C:\$T[0-9]+]] depends on 0, 2
// CHECK: 2: $T{{[0-9]+}} $T{{[0-9]+}} $T{{[0-9]+}}
// CHECK: 0: $T{{[0-9]+}} $T{{[0-9]+}} $T{{[0-9]+}}
// CHECK: solving component #1
// CHECK: (attempting type variable binding [[C]] := Int8
// CHECK: solving component #1
// CHECK: (attempting type variable binding [[C]] := Int8
// CHECK: solving component #1
// CHECK: (attempting type variable binding [[C]] := Int8
// CHECK: solving component #1
// CHECK: (attempting type variable binding [[C]] := Int8
// CHECK: (considering: $T{{[0-9]+}} conv [[C]]
// CHECK: (considering: $T{{[0-9]+}} conv [[C]]
// CHECK: (considering: [[C]] conv Int8
// CHECK: (found solution: [component: non-default literal(s), value: 2] [component: use of overloaded unapplied function(s), value: 2])
// CHECK: (composed solution: [component: non-default literal(s), value: 2] [component: use of overloaded unapplied function(s), value: 2])
// CHECK-NOT: (composed solution: [component: non-default literal(s), value: 2] [component: use of overloaded unapplied function(s), value: 2])
let _: Int8 = b ? Builtin.one_way(int8Or16(17)) : Builtin.one_way(int8Or16(42))
}
|