Skip to content

Commit 2e65561

Browse files
committed
Rust: Add more type inference tests
1 parent 601e317 commit 2e65561

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
@@ -1928,6 +1928,49 @@ mod method_determined_by_argument_type {
19281928

19291929
mod dereference;
19301930

1931+
mod explicit_type_args {
1932+
struct S1<T>(T);
1933+
1934+
#[derive(Default)]
1935+
struct S2;
1936+
1937+
impl<T : Default> S1<T> {
1938+
fn assoc_fun() -> Option<Self> {
1939+
None
1940+
}
1941+
1942+
fn default() -> Self {
1943+
S1(T::default())
1944+
}
1945+
1946+
fn method(self) -> Self {
1947+
self
1948+
}
1949+
}
1950+
1951+
type S3 = S1<S2>;
1952+
1953+
struct S4<T4 = S2>(T4);
1954+
1955+
struct S5<T5 = S2> { field: T5 }
1956+
1957+
pub fn f() {
1958+
let x1 : Option<S1<S2>> = S1::assoc_fun(); // $ type=x1:T.T.S2
1959+
let x2 = S1::<S2>::assoc_fun(); // $ MISSING: type=x2:T.T.S2
1960+
let x3 = S3::assoc_fun(); // $ MISSING: type=x3:T.T.S2
1961+
let x4 = S1::<S2>::method(S1::default()); // $ MISSING: method=method type=x4:T.S2
1962+
let x5 = S3::method(S1::default()); // $ MISSING: method=method type=x5:T.S2
1963+
let x6 = S4::<S2>(S2); // $ type=x6:T4.S2
1964+
let x7 = S4(S2); // $ type=x7:T4.S2
1965+
let x8 = S4(0); // $ type=x8:T4.i32
1966+
let x9 = S4(S2::default()); // $ type=x9:T4.S2
1967+
let x10 = S5::<S2> { field: S2 }; // $ type=x10:T5.S2
1968+
let x11 = S5 { field: S2 }; // $ type=x11:T5.S2
1969+
let x12 = S5 { field: 0 }; // $ type=x12:T5.i32
1970+
let x13 = S5 { field: S2::default() }; // $ type=x13:T5.S2
1971+
}
1972+
}
1973+
19311974
fn main() {
19321975
field_access::f();
19331976
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
@@ -2901,9 +2901,80 @@ inferType
29012901
| main.rs:1925:9:1925:9 | x | | {EXTERNAL LOCATION} | i64 |
29022902
| main.rs:1925:9:1925:22 | x.my_add(...) | | {EXTERNAL LOCATION} | i64 |
29032903
| main.rs:1925:18:1925:21 | true | | {EXTERNAL LOCATION} | bool |
2904-
| main.rs:1933:5:1933:20 | ...::f(...) | | main.rs:72:5:72:21 | Foo |
2905-
| main.rs:1934:5:1934:60 | ...::g(...) | | main.rs:72:5:72:21 | Foo |
2906-
| main.rs:1934:20:1934:38 | ...::Foo {...} | | main.rs:72:5:72:21 | Foo |
2907-
| main.rs:1934:41:1934:59 | ...::Foo {...} | | main.rs:72:5:72:21 | Foo |
2908-
| main.rs:1950:5:1950:15 | ...::f(...) | | {EXTERNAL LOCATION} | trait Future |
2904+
| main.rs:1938:40:1940:9 | { ... } | | {EXTERNAL LOCATION} | Option |
2905+
| main.rs:1938:40:1940:9 | { ... } | T | main.rs:1932:5:1932:20 | S1 |
2906+
| main.rs:1938:40:1940:9 | { ... } | T.T | main.rs:1937:10:1937:20 | T |
2907+
| main.rs:1939:13:1939:16 | None | | {EXTERNAL LOCATION} | Option |
2908+
| main.rs:1939:13:1939:16 | None | T | main.rs:1932:5:1932:20 | S1 |
2909+
| main.rs:1939:13:1939:16 | None | T.T | main.rs:1937:10:1937:20 | T |
2910+
| main.rs:1942:30:1944:9 | { ... } | | main.rs:1932:5:1932:20 | S1 |
2911+
| main.rs:1942:30:1944:9 | { ... } | T | main.rs:1937:10:1937:20 | T |
2912+
| main.rs:1943:13:1943:28 | S1(...) | | main.rs:1932:5:1932:20 | S1 |
2913+
| main.rs:1943:13:1943:28 | S1(...) | T | main.rs:1937:10:1937:20 | T |
2914+
| main.rs:1943:16:1943:27 | ...::default(...) | | main.rs:1937:10:1937:20 | T |
2915+
| main.rs:1946:19:1946:22 | SelfParam | | main.rs:1932:5:1932:20 | S1 |
2916+
| main.rs:1946:19:1946:22 | SelfParam | T | main.rs:1937:10:1937:20 | T |
2917+
| main.rs:1946:33:1948:9 | { ... } | | main.rs:1932:5:1932:20 | S1 |
2918+
| main.rs:1946:33:1948:9 | { ... } | T | main.rs:1937:10:1937:20 | T |
2919+
| main.rs:1947:13:1947:16 | self | | main.rs:1932:5:1932:20 | S1 |
2920+
| main.rs:1947:13:1947:16 | self | T | main.rs:1937:10:1937:20 | T |
2921+
| main.rs:1958:13:1958:14 | x1 | | {EXTERNAL LOCATION} | Option |
2922+
| main.rs:1958:13:1958:14 | x1 | T | main.rs:1932:5:1932:20 | S1 |
2923+
| main.rs:1958:13:1958:14 | x1 | T.T | main.rs:1934:5:1935:14 | S2 |
2924+
| main.rs:1958:35:1958:49 | ...::assoc_fun(...) | | {EXTERNAL LOCATION} | Option |
2925+
| main.rs:1958:35:1958:49 | ...::assoc_fun(...) | T | main.rs:1932:5:1932:20 | S1 |
2926+
| main.rs:1958:35:1958:49 | ...::assoc_fun(...) | T.T | main.rs:1934:5:1935:14 | S2 |
2927+
| main.rs:1959:13:1959:14 | x2 | | {EXTERNAL LOCATION} | Option |
2928+
| main.rs:1959:13:1959:14 | x2 | T | main.rs:1932:5:1932:20 | S1 |
2929+
| main.rs:1959:18:1959:38 | ...::assoc_fun(...) | | {EXTERNAL LOCATION} | Option |
2930+
| main.rs:1959:18:1959:38 | ...::assoc_fun(...) | T | main.rs:1932:5:1932:20 | S1 |
2931+
| main.rs:1961:13:1961:14 | x4 | | main.rs:1932:5:1932:20 | S1 |
2932+
| main.rs:1961:18:1961:48 | ...::method(...) | | main.rs:1932:5:1932:20 | S1 |
2933+
| main.rs:1961:35:1961:47 | ...::default(...) | | main.rs:1932:5:1932:20 | S1 |
2934+
| main.rs:1962:29:1962:41 | ...::default(...) | | main.rs:1932:5:1932:20 | S1 |
2935+
| main.rs:1963:13:1963:14 | x6 | | main.rs:1953:5:1953:27 | S4 |
2936+
| main.rs:1963:13:1963:14 | x6 | T4 | main.rs:1934:5:1935:14 | S2 |
2937+
| main.rs:1963:18:1963:29 | S4::<...>(...) | | main.rs:1953:5:1953:27 | S4 |
2938+
| main.rs:1963:18:1963:29 | S4::<...>(...) | T4 | main.rs:1934:5:1935:14 | S2 |
2939+
| main.rs:1963:27:1963:28 | S2 | | main.rs:1934:5:1935:14 | S2 |
2940+
| main.rs:1964:13:1964:14 | x7 | | main.rs:1953:5:1953:27 | S4 |
2941+
| main.rs:1964:13:1964:14 | x7 | T4 | main.rs:1934:5:1935:14 | S2 |
2942+
| main.rs:1964:18:1964:23 | S4(...) | | main.rs:1953:5:1953:27 | S4 |
2943+
| main.rs:1964:18:1964:23 | S4(...) | T4 | main.rs:1934:5:1935:14 | S2 |
2944+
| main.rs:1964:21:1964:22 | S2 | | main.rs:1934:5:1935:14 | S2 |
2945+
| main.rs:1965:13:1965:14 | x8 | | main.rs:1953:5:1953:27 | S4 |
2946+
| main.rs:1965:13:1965:14 | x8 | T4 | {EXTERNAL LOCATION} | i32 |
2947+
| main.rs:1965:18:1965:22 | S4(...) | | main.rs:1953:5:1953:27 | S4 |
2948+
| main.rs:1965:18:1965:22 | S4(...) | T4 | {EXTERNAL LOCATION} | i32 |
2949+
| main.rs:1965:21:1965:21 | 0 | | {EXTERNAL LOCATION} | i32 |
2950+
| main.rs:1966:13:1966:14 | x9 | | main.rs:1953:5:1953:27 | S4 |
2951+
| main.rs:1966:13:1966:14 | x9 | T4 | main.rs:1934:5:1935:14 | S2 |
2952+
| main.rs:1966:18:1966:34 | S4(...) | | main.rs:1953:5:1953:27 | S4 |
2953+
| main.rs:1966:18:1966:34 | S4(...) | T4 | main.rs:1934:5:1935:14 | S2 |
2954+
| main.rs:1966:21:1966:33 | ...::default(...) | | main.rs:1934:5:1935:14 | S2 |
2955+
| main.rs:1967:13:1967:15 | x10 | | main.rs:1955:5:1955:36 | S5 |
2956+
| main.rs:1967:13:1967:15 | x10 | T5 | main.rs:1934:5:1935:14 | S2 |
2957+
| main.rs:1967:19:1967:40 | S5::<...> {...} | | main.rs:1955:5:1955:36 | S5 |
2958+
| main.rs:1967:19:1967:40 | S5::<...> {...} | T5 | main.rs:1934:5:1935:14 | S2 |
2959+
| main.rs:1967:37:1967:38 | S2 | | main.rs:1934:5:1935:14 | S2 |
2960+
| main.rs:1968:13:1968:15 | x11 | | main.rs:1955:5:1955:36 | S5 |
2961+
| main.rs:1968:13:1968:15 | x11 | T5 | main.rs:1934:5:1935:14 | S2 |
2962+
| main.rs:1968:19:1968:34 | S5 {...} | | main.rs:1955:5:1955:36 | S5 |
2963+
| main.rs:1968:19:1968:34 | S5 {...} | T5 | main.rs:1934:5:1935:14 | S2 |
2964+
| main.rs:1968:31:1968:32 | S2 | | main.rs:1934:5:1935:14 | S2 |
2965+
| main.rs:1969:13:1969:15 | x12 | | main.rs:1955:5:1955:36 | S5 |
2966+
| main.rs:1969:13:1969:15 | x12 | T5 | {EXTERNAL LOCATION} | i32 |
2967+
| main.rs:1969:19:1969:33 | S5 {...} | | main.rs:1955:5:1955:36 | S5 |
2968+
| main.rs:1969:19:1969:33 | S5 {...} | T5 | {EXTERNAL LOCATION} | i32 |
2969+
| main.rs:1969:31:1969:31 | 0 | | {EXTERNAL LOCATION} | i32 |
2970+
| main.rs:1970:13:1970:15 | x13 | | main.rs:1955:5:1955:36 | S5 |
2971+
| main.rs:1970:13:1970:15 | x13 | T5 | main.rs:1934:5:1935:14 | S2 |
2972+
| main.rs:1970:19:1970:45 | S5 {...} | | main.rs:1955:5:1955:36 | S5 |
2973+
| main.rs:1970:19:1970:45 | S5 {...} | T5 | main.rs:1934:5:1935:14 | S2 |
2974+
| main.rs:1970:31:1970:43 | ...::default(...) | | main.rs:1934:5:1935:14 | S2 |
2975+
| main.rs:1976:5:1976:20 | ...::f(...) | | main.rs:72:5:72:21 | Foo |
2976+
| main.rs:1977:5:1977:60 | ...::g(...) | | main.rs:72:5:72:21 | Foo |
2977+
| main.rs:1977:20:1977:38 | ...::Foo {...} | | main.rs:72:5:72:21 | Foo |
2978+
| main.rs:1977:41:1977:59 | ...::Foo {...} | | main.rs:72:5:72:21 | Foo |
2979+
| main.rs:1993:5:1993:15 | ...::f(...) | | {EXTERNAL LOCATION} | trait Future |
29092980
testFailures

0 commit comments

Comments
 (0)