Skip to content

Commit 1928266

Browse files
committed
Rust: Add more type inference tests
1 parent 494400d commit 1928266

File tree

2 files changed

+124
-5
lines changed

2 files changed

+124
-5
lines changed

rust/ql/test/library-tests/type-inference/main.rs

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2157,6 +2157,54 @@ mod loops {
21572157

21582158
mod dereference;
21592159

2160+
mod explicit_type_args {
2161+
struct S1<T>(T);
2162+
2163+
#[derive(Default)]
2164+
struct S2;
2165+
2166+
impl<T: Default> S1<T> {
2167+
fn assoc_fun() -> Option<Self> {
2168+
None
2169+
}
2170+
2171+
fn default() -> Self {
2172+
S1(T::default())
2173+
}
2174+
2175+
fn method(self) -> Self {
2176+
self
2177+
}
2178+
}
2179+
2180+
type S3 = S1<S2>;
2181+
2182+
struct S4<T4 = S2>(T4);
2183+
2184+
struct S5<T5 = S2> {
2185+
field: T5,
2186+
}
2187+
2188+
pub fn f() {
2189+
let x1: Option<S1<S2>> = S1::assoc_fun(); // $ type=x1:T.T.S2
2190+
let x2 = S1::<S2>::assoc_fun(); // $ MISSING: type=x2:T.T.S2
2191+
let x3 = S3::assoc_fun(); // $ MISSING: type=x3:T.T.S2
2192+
let x4 = S1::<S2>::method(S1::default()); // $ MISSING: method=method type=x4:T.S2
2193+
let x5 = S3::method(S1::default()); // $ MISSING: method=method type=x5:T.S2
2194+
let x6 = S4::<S2>(S2); // $ type=x6:T4.S2
2195+
let x7 = S4(S2); // $ type=x7:T4.S2
2196+
let x8 = S4(0); // $ type=x8:T4.i32
2197+
let x9 = S4(S2::default()); // $ type=x9:T4.S2
2198+
let x10 = S5::<S2> { field: S2 }; // $ type=x10:T5.S2
2199+
let x11 = S5 { field: S2 }; // $ type=x11:T5.S2
2200+
let x12 = S5 { field: 0 }; // $ type=x12:T5.i32
2201+
let x13 = S5 // $ type=x13:T5.S2
2202+
{
2203+
field: S2::default(),
2204+
};
2205+
}
2206+
}
2207+
21602208
fn main() {
21612209
field_access::f();
21622210
method_impl::f();

rust/ql/test/library-tests/type-inference/type-inference.expected

Lines changed: 76 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3335,9 +3335,80 @@ inferType
33353335
| main.rs:2153:13:2153:13 | a | | {EXTERNAL LOCATION} | i64 |
33363336
| main.rs:2153:13:2153:18 | ... += ... | | file://:0:0:0:0 | () |
33373337
| main.rs:2153:18:2153:18 | 1 | | {EXTERNAL LOCATION} | i32 |
3338-
| main.rs:2162:5:2162:20 | ...::f(...) | | main.rs:72:5:72:21 | Foo |
3339-
| main.rs:2163:5:2163:60 | ...::g(...) | | main.rs:72:5:72:21 | Foo |
3340-
| main.rs:2163:20:2163:38 | ...::Foo {...} | | main.rs:72:5:72:21 | Foo |
3341-
| main.rs:2163:41:2163:59 | ...::Foo {...} | | main.rs:72:5:72:21 | Foo |
3342-
| main.rs:2179:5:2179:15 | ...::f(...) | | {EXTERNAL LOCATION} | trait Future |
3338+
| main.rs:2167:40:2169:9 | { ... } | | {EXTERNAL LOCATION} | Option |
3339+
| main.rs:2167:40:2169:9 | { ... } | T | main.rs:2161:5:2161:20 | S1 |
3340+
| main.rs:2167:40:2169:9 | { ... } | T.T | main.rs:2166:10:2166:19 | T |
3341+
| main.rs:2168:13:2168:16 | None | | {EXTERNAL LOCATION} | Option |
3342+
| main.rs:2168:13:2168:16 | None | T | main.rs:2161:5:2161:20 | S1 |
3343+
| main.rs:2168:13:2168:16 | None | T.T | main.rs:2166:10:2166:19 | T |
3344+
| main.rs:2171:30:2173:9 | { ... } | | main.rs:2161:5:2161:20 | S1 |
3345+
| main.rs:2171:30:2173:9 | { ... } | T | main.rs:2166:10:2166:19 | T |
3346+
| main.rs:2172:13:2172:28 | S1(...) | | main.rs:2161:5:2161:20 | S1 |
3347+
| main.rs:2172:13:2172:28 | S1(...) | T | main.rs:2166:10:2166:19 | T |
3348+
| main.rs:2172:16:2172:27 | ...::default(...) | | main.rs:2166:10:2166:19 | T |
3349+
| main.rs:2175:19:2175:22 | SelfParam | | main.rs:2161:5:2161:20 | S1 |
3350+
| main.rs:2175:19:2175:22 | SelfParam | T | main.rs:2166:10:2166:19 | T |
3351+
| main.rs:2175:33:2177:9 | { ... } | | main.rs:2161:5:2161:20 | S1 |
3352+
| main.rs:2175:33:2177:9 | { ... } | T | main.rs:2166:10:2166:19 | T |
3353+
| main.rs:2176:13:2176:16 | self | | main.rs:2161:5:2161:20 | S1 |
3354+
| main.rs:2176:13:2176:16 | self | T | main.rs:2166:10:2166:19 | T |
3355+
| main.rs:2189:13:2189:14 | x1 | | {EXTERNAL LOCATION} | Option |
3356+
| main.rs:2189:13:2189:14 | x1 | T | main.rs:2161:5:2161:20 | S1 |
3357+
| main.rs:2189:13:2189:14 | x1 | T.T | main.rs:2163:5:2164:14 | S2 |
3358+
| main.rs:2189:34:2189:48 | ...::assoc_fun(...) | | {EXTERNAL LOCATION} | Option |
3359+
| main.rs:2189:34:2189:48 | ...::assoc_fun(...) | T | main.rs:2161:5:2161:20 | S1 |
3360+
| main.rs:2189:34:2189:48 | ...::assoc_fun(...) | T.T | main.rs:2163:5:2164:14 | S2 |
3361+
| main.rs:2190:13:2190:14 | x2 | | {EXTERNAL LOCATION} | Option |
3362+
| main.rs:2190:13:2190:14 | x2 | T | main.rs:2161:5:2161:20 | S1 |
3363+
| main.rs:2190:18:2190:38 | ...::assoc_fun(...) | | {EXTERNAL LOCATION} | Option |
3364+
| main.rs:2190:18:2190:38 | ...::assoc_fun(...) | T | main.rs:2161:5:2161:20 | S1 |
3365+
| main.rs:2192:13:2192:14 | x4 | | main.rs:2161:5:2161:20 | S1 |
3366+
| main.rs:2192:18:2192:48 | ...::method(...) | | main.rs:2161:5:2161:20 | S1 |
3367+
| main.rs:2192:35:2192:47 | ...::default(...) | | main.rs:2161:5:2161:20 | S1 |
3368+
| main.rs:2193:29:2193:41 | ...::default(...) | | main.rs:2161:5:2161:20 | S1 |
3369+
| main.rs:2194:13:2194:14 | x6 | | main.rs:2182:5:2182:27 | S4 |
3370+
| main.rs:2194:13:2194:14 | x6 | T4 | main.rs:2163:5:2164:14 | S2 |
3371+
| main.rs:2194:18:2194:29 | S4::<...>(...) | | main.rs:2182:5:2182:27 | S4 |
3372+
| main.rs:2194:18:2194:29 | S4::<...>(...) | T4 | main.rs:2163:5:2164:14 | S2 |
3373+
| main.rs:2194:27:2194:28 | S2 | | main.rs:2163:5:2164:14 | S2 |
3374+
| main.rs:2195:13:2195:14 | x7 | | main.rs:2182:5:2182:27 | S4 |
3375+
| main.rs:2195:13:2195:14 | x7 | T4 | main.rs:2163:5:2164:14 | S2 |
3376+
| main.rs:2195:18:2195:23 | S4(...) | | main.rs:2182:5:2182:27 | S4 |
3377+
| main.rs:2195:18:2195:23 | S4(...) | T4 | main.rs:2163:5:2164:14 | S2 |
3378+
| main.rs:2195:21:2195:22 | S2 | | main.rs:2163:5:2164:14 | S2 |
3379+
| main.rs:2196:13:2196:14 | x8 | | main.rs:2182:5:2182:27 | S4 |
3380+
| main.rs:2196:13:2196:14 | x8 | T4 | {EXTERNAL LOCATION} | i32 |
3381+
| main.rs:2196:18:2196:22 | S4(...) | | main.rs:2182:5:2182:27 | S4 |
3382+
| main.rs:2196:18:2196:22 | S4(...) | T4 | {EXTERNAL LOCATION} | i32 |
3383+
| main.rs:2196:21:2196:21 | 0 | | {EXTERNAL LOCATION} | i32 |
3384+
| main.rs:2197:13:2197:14 | x9 | | main.rs:2182:5:2182:27 | S4 |
3385+
| main.rs:2197:13:2197:14 | x9 | T4 | main.rs:2163:5:2164:14 | S2 |
3386+
| main.rs:2197:18:2197:34 | S4(...) | | main.rs:2182:5:2182:27 | S4 |
3387+
| main.rs:2197:18:2197:34 | S4(...) | T4 | main.rs:2163:5:2164:14 | S2 |
3388+
| main.rs:2197:21:2197:33 | ...::default(...) | | main.rs:2163:5:2164:14 | S2 |
3389+
| main.rs:2198:13:2198:15 | x10 | | main.rs:2184:5:2186:5 | S5 |
3390+
| main.rs:2198:13:2198:15 | x10 | T5 | main.rs:2163:5:2164:14 | S2 |
3391+
| main.rs:2198:19:2198:40 | S5::<...> {...} | | main.rs:2184:5:2186:5 | S5 |
3392+
| main.rs:2198:19:2198:40 | S5::<...> {...} | T5 | main.rs:2163:5:2164:14 | S2 |
3393+
| main.rs:2198:37:2198:38 | S2 | | main.rs:2163:5:2164:14 | S2 |
3394+
| main.rs:2199:13:2199:15 | x11 | | main.rs:2184:5:2186:5 | S5 |
3395+
| main.rs:2199:13:2199:15 | x11 | T5 | main.rs:2163:5:2164:14 | S2 |
3396+
| main.rs:2199:19:2199:34 | S5 {...} | | main.rs:2184:5:2186:5 | S5 |
3397+
| main.rs:2199:19:2199:34 | S5 {...} | T5 | main.rs:2163:5:2164:14 | S2 |
3398+
| main.rs:2199:31:2199:32 | S2 | | main.rs:2163:5:2164:14 | S2 |
3399+
| main.rs:2200:13:2200:15 | x12 | | main.rs:2184:5:2186:5 | S5 |
3400+
| main.rs:2200:13:2200:15 | x12 | T5 | {EXTERNAL LOCATION} | i32 |
3401+
| main.rs:2200:19:2200:33 | S5 {...} | | main.rs:2184:5:2186:5 | S5 |
3402+
| main.rs:2200:19:2200:33 | S5 {...} | T5 | {EXTERNAL LOCATION} | i32 |
3403+
| main.rs:2200:31:2200:31 | 0 | | {EXTERNAL LOCATION} | i32 |
3404+
| main.rs:2201:13:2201:15 | x13 | | main.rs:2184:5:2186:5 | S5 |
3405+
| main.rs:2201:13:2201:15 | x13 | T5 | main.rs:2163:5:2164:14 | S2 |
3406+
| main.rs:2201:19:2204:9 | S5 {...} | | main.rs:2184:5:2186:5 | S5 |
3407+
| main.rs:2201:19:2204:9 | S5 {...} | T5 | main.rs:2163:5:2164:14 | S2 |
3408+
| main.rs:2203:20:2203:32 | ...::default(...) | | main.rs:2163:5:2164:14 | S2 |
3409+
| main.rs:2210:5:2210:20 | ...::f(...) | | main.rs:72:5:72:21 | Foo |
3410+
| main.rs:2211:5:2211:60 | ...::g(...) | | main.rs:72:5:72:21 | Foo |
3411+
| main.rs:2211:20:2211:38 | ...::Foo {...} | | main.rs:72:5:72:21 | Foo |
3412+
| main.rs:2211:41:2211:59 | ...::Foo {...} | | main.rs:72:5:72:21 | Foo |
3413+
| main.rs:2227:5:2227:15 | ...::f(...) | | {EXTERNAL LOCATION} | trait Future |
33433414
testFailures

0 commit comments

Comments
 (0)