Skip to content

Commit e48dad4

Browse files
committed
Rust: Add more type inference tests
1 parent afcd8c3 commit e48dad4

File tree

2 files changed

+119
-5
lines changed

2 files changed

+119
-5
lines changed

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

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2040,6 +2040,49 @@ mod loops {
20402040

20412041
mod dereference;
20422042

2043+
mod explicit_type_args {
2044+
struct S1<T>(T);
2045+
2046+
#[derive(Default)]
2047+
struct S2;
2048+
2049+
impl<T : Default> S1<T> {
2050+
fn assoc_fun() -> Option<Self> {
2051+
None
2052+
}
2053+
2054+
fn default() -> Self {
2055+
S1(T::default())
2056+
}
2057+
2058+
fn method(self) -> Self {
2059+
self
2060+
}
2061+
}
2062+
2063+
type S3 = S1<S2>;
2064+
2065+
struct S4<T4 = S2>(T4);
2066+
2067+
struct S5<T5 = S2> { field: T5 }
2068+
2069+
pub fn f() {
2070+
let x1 : Option<S1<S2>> = S1::assoc_fun(); // $ type=x1:T.T.S2
2071+
let x2 = S1::<S2>::assoc_fun(); // $ MISSING: type=x2:T.T.S2
2072+
let x3 = S3::assoc_fun(); // $ MISSING: type=x3:T.T.S2
2073+
let x4 = S1::<S2>::method(S1::default()); // $ MISSING: method=method type=x4:T.S2
2074+
let x5 = S3::method(S1::default()); // $ MISSING: method=method type=x5:T.S2
2075+
let x6 = S4::<S2>(S2); // $ type=x6:T4.S2
2076+
let x7 = S4(S2); // $ type=x7:T4.S2
2077+
let x8 = S4(0); // $ type=x8:T4.i32
2078+
let x9 = S4(S2::default()); // $ type=x9:T4.S2
2079+
let x10 = S5::<S2> { field: S2 }; // $ type=x10:T5.S2
2080+
let x11 = S5 { field: S2 }; // $ type=x11:T5.S2
2081+
let x12 = S5 { field: 0 }; // $ type=x12:T5.i32
2082+
let x13 = S5 { field: S2::default() }; // $ type=x13:T5.S2
2083+
}
2084+
}
2085+
20432086
fn main() {
20442087
field_access::f();
20452088
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
@@ -3194,9 +3194,80 @@ inferType
31943194
| main.rs:2036:13:2036:13 | a | | {EXTERNAL LOCATION} | i64 |
31953195
| main.rs:2036:13:2036:18 | ... += ... | | file://:0:0:0:0 | () |
31963196
| main.rs:2036:18:2036:18 | 1 | | {EXTERNAL LOCATION} | i32 |
3197-
| main.rs:2045:5:2045:20 | ...::f(...) | | main.rs:72:5:72:21 | Foo |
3198-
| main.rs:2046:5:2046:60 | ...::g(...) | | main.rs:72:5:72:21 | Foo |
3199-
| main.rs:2046:20:2046:38 | ...::Foo {...} | | main.rs:72:5:72:21 | Foo |
3200-
| main.rs:2046:41:2046:59 | ...::Foo {...} | | main.rs:72:5:72:21 | Foo |
3201-
| main.rs:2062:5:2062:15 | ...::f(...) | | {EXTERNAL LOCATION} | trait Future |
3197+
| main.rs:2050:40:2052:9 | { ... } | | {EXTERNAL LOCATION} | Option |
3198+
| main.rs:2050:40:2052:9 | { ... } | T | main.rs:2044:5:2044:20 | S1 |
3199+
| main.rs:2050:40:2052:9 | { ... } | T.T | main.rs:2049:10:2049:20 | T |
3200+
| main.rs:2051:13:2051:16 | None | | {EXTERNAL LOCATION} | Option |
3201+
| main.rs:2051:13:2051:16 | None | T | main.rs:2044:5:2044:20 | S1 |
3202+
| main.rs:2051:13:2051:16 | None | T.T | main.rs:2049:10:2049:20 | T |
3203+
| main.rs:2054:30:2056:9 | { ... } | | main.rs:2044:5:2044:20 | S1 |
3204+
| main.rs:2054:30:2056:9 | { ... } | T | main.rs:2049:10:2049:20 | T |
3205+
| main.rs:2055:13:2055:28 | S1(...) | | main.rs:2044:5:2044:20 | S1 |
3206+
| main.rs:2055:13:2055:28 | S1(...) | T | main.rs:2049:10:2049:20 | T |
3207+
| main.rs:2055:16:2055:27 | ...::default(...) | | main.rs:2049:10:2049:20 | T |
3208+
| main.rs:2058:19:2058:22 | SelfParam | | main.rs:2044:5:2044:20 | S1 |
3209+
| main.rs:2058:19:2058:22 | SelfParam | T | main.rs:2049:10:2049:20 | T |
3210+
| main.rs:2058:33:2060:9 | { ... } | | main.rs:2044:5:2044:20 | S1 |
3211+
| main.rs:2058:33:2060:9 | { ... } | T | main.rs:2049:10:2049:20 | T |
3212+
| main.rs:2059:13:2059:16 | self | | main.rs:2044:5:2044:20 | S1 |
3213+
| main.rs:2059:13:2059:16 | self | T | main.rs:2049:10:2049:20 | T |
3214+
| main.rs:2070:13:2070:14 | x1 | | {EXTERNAL LOCATION} | Option |
3215+
| main.rs:2070:13:2070:14 | x1 | T | main.rs:2044:5:2044:20 | S1 |
3216+
| main.rs:2070:13:2070:14 | x1 | T.T | main.rs:2046:5:2047:14 | S2 |
3217+
| main.rs:2070:35:2070:49 | ...::assoc_fun(...) | | {EXTERNAL LOCATION} | Option |
3218+
| main.rs:2070:35:2070:49 | ...::assoc_fun(...) | T | main.rs:2044:5:2044:20 | S1 |
3219+
| main.rs:2070:35:2070:49 | ...::assoc_fun(...) | T.T | main.rs:2046:5:2047:14 | S2 |
3220+
| main.rs:2071:13:2071:14 | x2 | | {EXTERNAL LOCATION} | Option |
3221+
| main.rs:2071:13:2071:14 | x2 | T | main.rs:2044:5:2044:20 | S1 |
3222+
| main.rs:2071:18:2071:38 | ...::assoc_fun(...) | | {EXTERNAL LOCATION} | Option |
3223+
| main.rs:2071:18:2071:38 | ...::assoc_fun(...) | T | main.rs:2044:5:2044:20 | S1 |
3224+
| main.rs:2073:13:2073:14 | x4 | | main.rs:2044:5:2044:20 | S1 |
3225+
| main.rs:2073:18:2073:48 | ...::method(...) | | main.rs:2044:5:2044:20 | S1 |
3226+
| main.rs:2073:35:2073:47 | ...::default(...) | | main.rs:2044:5:2044:20 | S1 |
3227+
| main.rs:2074:29:2074:41 | ...::default(...) | | main.rs:2044:5:2044:20 | S1 |
3228+
| main.rs:2075:13:2075:14 | x6 | | main.rs:2065:5:2065:27 | S4 |
3229+
| main.rs:2075:13:2075:14 | x6 | T4 | main.rs:2046:5:2047:14 | S2 |
3230+
| main.rs:2075:18:2075:29 | S4::<...>(...) | | main.rs:2065:5:2065:27 | S4 |
3231+
| main.rs:2075:18:2075:29 | S4::<...>(...) | T4 | main.rs:2046:5:2047:14 | S2 |
3232+
| main.rs:2075:27:2075:28 | S2 | | main.rs:2046:5:2047:14 | S2 |
3233+
| main.rs:2076:13:2076:14 | x7 | | main.rs:2065:5:2065:27 | S4 |
3234+
| main.rs:2076:13:2076:14 | x7 | T4 | main.rs:2046:5:2047:14 | S2 |
3235+
| main.rs:2076:18:2076:23 | S4(...) | | main.rs:2065:5:2065:27 | S4 |
3236+
| main.rs:2076:18:2076:23 | S4(...) | T4 | main.rs:2046:5:2047:14 | S2 |
3237+
| main.rs:2076:21:2076:22 | S2 | | main.rs:2046:5:2047:14 | S2 |
3238+
| main.rs:2077:13:2077:14 | x8 | | main.rs:2065:5:2065:27 | S4 |
3239+
| main.rs:2077:13:2077:14 | x8 | T4 | {EXTERNAL LOCATION} | i32 |
3240+
| main.rs:2077:18:2077:22 | S4(...) | | main.rs:2065:5:2065:27 | S4 |
3241+
| main.rs:2077:18:2077:22 | S4(...) | T4 | {EXTERNAL LOCATION} | i32 |
3242+
| main.rs:2077:21:2077:21 | 0 | | {EXTERNAL LOCATION} | i32 |
3243+
| main.rs:2078:13:2078:14 | x9 | | main.rs:2065:5:2065:27 | S4 |
3244+
| main.rs:2078:13:2078:14 | x9 | T4 | main.rs:2046:5:2047:14 | S2 |
3245+
| main.rs:2078:18:2078:34 | S4(...) | | main.rs:2065:5:2065:27 | S4 |
3246+
| main.rs:2078:18:2078:34 | S4(...) | T4 | main.rs:2046:5:2047:14 | S2 |
3247+
| main.rs:2078:21:2078:33 | ...::default(...) | | main.rs:2046:5:2047:14 | S2 |
3248+
| main.rs:2079:13:2079:15 | x10 | | main.rs:2067:5:2067:36 | S5 |
3249+
| main.rs:2079:13:2079:15 | x10 | T5 | main.rs:2046:5:2047:14 | S2 |
3250+
| main.rs:2079:19:2079:40 | S5::<...> {...} | | main.rs:2067:5:2067:36 | S5 |
3251+
| main.rs:2079:19:2079:40 | S5::<...> {...} | T5 | main.rs:2046:5:2047:14 | S2 |
3252+
| main.rs:2079:37:2079:38 | S2 | | main.rs:2046:5:2047:14 | S2 |
3253+
| main.rs:2080:13:2080:15 | x11 | | main.rs:2067:5:2067:36 | S5 |
3254+
| main.rs:2080:13:2080:15 | x11 | T5 | main.rs:2046:5:2047:14 | S2 |
3255+
| main.rs:2080:19:2080:34 | S5 {...} | | main.rs:2067:5:2067:36 | S5 |
3256+
| main.rs:2080:19:2080:34 | S5 {...} | T5 | main.rs:2046:5:2047:14 | S2 |
3257+
| main.rs:2080:31:2080:32 | S2 | | main.rs:2046:5:2047:14 | S2 |
3258+
| main.rs:2081:13:2081:15 | x12 | | main.rs:2067:5:2067:36 | S5 |
3259+
| main.rs:2081:13:2081:15 | x12 | T5 | {EXTERNAL LOCATION} | i32 |
3260+
| main.rs:2081:19:2081:33 | S5 {...} | | main.rs:2067:5:2067:36 | S5 |
3261+
| main.rs:2081:19:2081:33 | S5 {...} | T5 | {EXTERNAL LOCATION} | i32 |
3262+
| main.rs:2081:31:2081:31 | 0 | | {EXTERNAL LOCATION} | i32 |
3263+
| main.rs:2082:13:2082:15 | x13 | | main.rs:2067:5:2067:36 | S5 |
3264+
| main.rs:2082:13:2082:15 | x13 | T5 | main.rs:2046:5:2047:14 | S2 |
3265+
| main.rs:2082:19:2082:45 | S5 {...} | | main.rs:2067:5:2067:36 | S5 |
3266+
| main.rs:2082:19:2082:45 | S5 {...} | T5 | main.rs:2046:5:2047:14 | S2 |
3267+
| main.rs:2082:31:2082:43 | ...::default(...) | | main.rs:2046:5:2047:14 | S2 |
3268+
| main.rs:2088:5:2088:20 | ...::f(...) | | main.rs:72:5:72:21 | Foo |
3269+
| main.rs:2089:5:2089:60 | ...::g(...) | | main.rs:72:5:72:21 | Foo |
3270+
| main.rs:2089:20:2089:38 | ...::Foo {...} | | main.rs:72:5:72:21 | Foo |
3271+
| main.rs:2089:41:2089:59 | ...::Foo {...} | | main.rs:72:5:72:21 | Foo |
3272+
| main.rs:2105:5:2105:15 | ...::f(...) | | {EXTERNAL LOCATION} | trait Future |
32023273
testFailures

0 commit comments

Comments
 (0)