Skip to content

Commit 61ef133

Browse files
authored
Merge pull request #22952 from hvitved/unified/type-inference-variance-test
Unified: Add type inference test for missing variance handling
2 parents 328923a + c65f186 commit 61ef133

2 files changed

Lines changed: 90 additions & 0 deletions

File tree

‎unified/ql/test/library-tests/type-inference/type-inference.expected‎

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -752,6 +752,34 @@ inferCertainType
752752
| type_constraints.swift:256:14:256:18 | upper | | type_constraints.swift:254:12:254:24 | T |
753753
| type_constraints.swift:256:29:256:33 | upper | | type_constraints.swift:254:12:254:24 | T |
754754
| type_constraints.swift:257:10:257:14 | value | | type_constraints.swift:254:12:254:24 | T |
755+
| variance.swift:7:18:7:18 | f | | {EXTERNAL LOCATION} | Function |
756+
| variance.swift:7:18:7:18 | f | Args | {EXTERNAL LOCATION} | Tuple1 |
757+
| variance.swift:7:18:7:18 | f | Args.T0 | variance.swift:5:1:5:21 | B |
758+
| variance.swift:7:18:7:18 | f | Args.T0.Tb | variance.swift:7:10:7:11 | T1 |
759+
| variance.swift:7:18:7:18 | f | Return | variance.swift:3:1:3:14 | A |
760+
| variance.swift:7:18:7:18 | f | Return.Ta | variance.swift:7:14:7:15 | T2 |
761+
| variance.swift:11:5:11:7 | lam | | {EXTERNAL LOCATION} | Function |
762+
| variance.swift:11:5:11:7 | lam | Args | {EXTERNAL LOCATION} | Tuple1 |
763+
| variance.swift:11:5:11:7 | lam | Args.T0 | variance.swift:3:1:3:14 | A |
764+
| variance.swift:11:5:11:7 | lam | Args.T0.Ta | {EXTERNAL LOCATION} | Int |
765+
| variance.swift:11:5:11:7 | lam | Return | variance.swift:5:1:5:21 | B |
766+
| variance.swift:11:5:11:7 | lam | Return.Tb | {EXTERNAL LOCATION} | String |
767+
| variance.swift:11:11:11:53 | FunctionExpr | | {EXTERNAL LOCATION} | Function |
768+
| variance.swift:11:11:11:53 | FunctionExpr | Args | {EXTERNAL LOCATION} | Tuple1 |
769+
| variance.swift:11:11:11:53 | FunctionExpr | Args.T0 | variance.swift:3:1:3:14 | A |
770+
| variance.swift:11:11:11:53 | FunctionExpr | Args.T0.Ta | {EXTERNAL LOCATION} | Int |
771+
| variance.swift:11:11:11:53 | FunctionExpr | Return | variance.swift:5:1:5:21 | B |
772+
| variance.swift:11:11:11:53 | FunctionExpr | Return.Tb | {EXTERNAL LOCATION} | String |
773+
| variance.swift:11:14:11:14 | a | | variance.swift:3:1:3:14 | A |
774+
| variance.swift:11:14:11:14 | a | Ta | {EXTERNAL LOCATION} | Int |
775+
| variance.swift:13:16:13:18 | lam | | {EXTERNAL LOCATION} | Function |
776+
| variance.swift:13:16:13:18 | lam | Args | {EXTERNAL LOCATION} | Tuple1 |
777+
| variance.swift:13:16:13:18 | lam | Args.T0 | variance.swift:3:1:3:14 | A |
778+
| variance.swift:13:16:13:18 | lam | Args.T0.Ta | {EXTERNAL LOCATION} | Int |
779+
| variance.swift:13:16:13:18 | lam | Return | variance.swift:5:1:5:21 | B |
780+
| variance.swift:13:16:13:18 | lam | Return.Tb | {EXTERNAL LOCATION} | String |
781+
| variance.swift:18:7:18:7 | x | | variance.swift:3:1:3:14 | A |
782+
| variance.swift:18:7:18:7 | x | Ta | {EXTERNAL LOCATION} | Int |
755783
inferType
756784
| accessors.swift:4:7:4:12 | stored | | {EXTERNAL LOCATION} | Int |
757785
| accessors.swift:4:21:4:21 | 0 | | {EXTERNAL LOCATION} | Int |
@@ -3398,4 +3426,47 @@ inferType
33983426
| type_constraints.swift:263:18:263:20 | "m" | | {EXTERNAL LOCATION} | String |
33993427
| type_constraints.swift:263:28:263:30 | "a" | | {EXTERNAL LOCATION} | String |
34003428
| type_constraints.swift:263:38:263:40 | "z" | | {EXTERNAL LOCATION} | String |
3429+
| variance.swift:7:18:7:18 | f | | {EXTERNAL LOCATION} | Function |
3430+
| variance.swift:7:18:7:18 | f | Args | {EXTERNAL LOCATION} | Tuple1 |
3431+
| variance.swift:7:18:7:18 | f | Args.T0 | variance.swift:5:1:5:21 | B |
3432+
| variance.swift:7:18:7:18 | f | Args.T0.Tb | variance.swift:7:10:7:11 | T1 |
3433+
| variance.swift:7:18:7:18 | f | Return | variance.swift:3:1:3:14 | A |
3434+
| variance.swift:7:18:7:18 | f | Return.Ta | variance.swift:7:14:7:15 | T2 |
3435+
| variance.swift:11:5:11:7 | lam | | {EXTERNAL LOCATION} | Function |
3436+
| variance.swift:11:5:11:7 | lam | Args | {EXTERNAL LOCATION} | Tuple1 |
3437+
| variance.swift:11:5:11:7 | lam | Args.T0 | variance.swift:3:1:3:14 | A |
3438+
| variance.swift:11:5:11:7 | lam | Args.T0.Ta | {EXTERNAL LOCATION} | Int |
3439+
| variance.swift:11:5:11:7 | lam | Return | variance.swift:5:1:5:21 | B |
3440+
| variance.swift:11:5:11:7 | lam | Return.Tb | {EXTERNAL LOCATION} | String |
3441+
| variance.swift:11:11:11:53 | FunctionExpr | | {EXTERNAL LOCATION} | Function |
3442+
| variance.swift:11:11:11:53 | FunctionExpr | Args | {EXTERNAL LOCATION} | Tuple1 |
3443+
| variance.swift:11:11:11:53 | FunctionExpr | Args.T0 | variance.swift:3:1:3:14 | A |
3444+
| variance.swift:11:11:11:53 | FunctionExpr | Args.T0.Ta | {EXTERNAL LOCATION} | Int |
3445+
| variance.swift:11:11:11:53 | FunctionExpr | Return | variance.swift:5:1:5:21 | B |
3446+
| variance.swift:11:11:11:53 | FunctionExpr | Return.Tb | {EXTERNAL LOCATION} | String |
3447+
| variance.swift:11:14:11:14 | a | | variance.swift:3:1:3:14 | A |
3448+
| variance.swift:11:14:11:14 | a | Ta | {EXTERNAL LOCATION} | Int |
3449+
| variance.swift:11:41:11:49 | GenericTypeExpr | | variance.swift:5:1:5:21 | B |
3450+
| variance.swift:11:41:11:49 | GenericTypeExpr | Tb | {EXTERNAL LOCATION} | String |
3451+
| variance.swift:11:41:11:51 | ...(...) | | variance.swift:5:1:5:21 | B |
3452+
| variance.swift:11:41:11:51 | ...(...) | Tb | {EXTERNAL LOCATION} | String |
3453+
| variance.swift:11:41:11:51 | Block | | variance.swift:5:1:5:21 | B |
3454+
| variance.swift:11:41:11:51 | Block | Tb | {EXTERNAL LOCATION} | String |
3455+
| variance.swift:13:5:13:5 | x | | {EXTERNAL LOCATION} | Tuple2 |
3456+
| variance.swift:13:9:13:19 | foo(...) | | {EXTERNAL LOCATION} | Tuple2 |
3457+
| variance.swift:13:16:13:18 | lam | | {EXTERNAL LOCATION} | Function |
3458+
| variance.swift:13:16:13:18 | lam | Args | {EXTERNAL LOCATION} | Tuple1 |
3459+
| variance.swift:13:16:13:18 | lam | Args.T0 | variance.swift:3:1:3:14 | A |
3460+
| variance.swift:13:16:13:18 | lam | Args.T0.Ta | {EXTERNAL LOCATION} | Int |
3461+
| variance.swift:13:16:13:18 | lam | Return | variance.swift:5:1:5:21 | B |
3462+
| variance.swift:13:16:13:18 | lam | Return.Tb | {EXTERNAL LOCATION} | String |
3463+
| variance.swift:15:23:15:29 | Block | | variance.swift:5:1:5:21 | B |
3464+
| variance.swift:15:23:15:29 | Block | Tb | variance.swift:15:10:15:10 | T |
3465+
| variance.swift:15:25:15:25 | B | | variance.swift:5:1:5:21 | B |
3466+
| variance.swift:15:25:15:25 | B | Tb | variance.swift:15:10:15:10 | T |
3467+
| variance.swift:15:25:15:27 | B(...) | | variance.swift:5:1:5:21 | B |
3468+
| variance.swift:15:25:15:27 | B(...) | Tb | variance.swift:15:10:15:10 | T |
3469+
| variance.swift:18:7:18:7 | x | | variance.swift:3:1:3:14 | A |
3470+
| variance.swift:18:7:18:7 | x | Ta | {EXTERNAL LOCATION} | Int |
3471+
| variance.swift:18:19:18:23 | bar(...) | | variance.swift:5:1:5:21 | B |
34013472
testFailures
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
// variance is not currently supported
2+
3+
class A<Ta> {}
4+
5+
class B<Tb>: A<Tb> {}
6+
7+
func foo<T1, T2>(f: (B<T1>) -> A<T2>) -> (T1, T2) {
8+
fatalError() // placeholder implementation
9+
}
10+
11+
let lam = { (a: A<Int>) -> B<String> in B<String>() } // $ target=A.init
12+
13+
let x = foo(f: lam) // $ target=foo $ MISSING: type=x@Tuple2<T0>:Int type=x@Tuple2<T1>:String
14+
15+
func bar<T>() -> B<T> { B() } // $ target=A.init
16+
17+
func baz() {
18+
let x: A<Int> = bar() // $ target=bar $ MISSING: type=bar(...)@B<Tb>:Int
19+
}

0 commit comments

Comments
 (0)