Skip to content

Commit 838f3b9

Browse files
committed
Rust: Add type inference test
1 parent b5bf1c5 commit 838f3b9

File tree

2 files changed

+90
-0
lines changed

2 files changed

+90
-0
lines changed

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

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,3 +32,45 @@ mod regression1 {
3232
opt_e.unwrap() // $ target=unwrap
3333
}
3434
}
35+
36+
mod regression2 {
37+
use std::ops::Sub;
38+
39+
#[derive(Copy, Clone)]
40+
struct S1;
41+
#[derive(Copy, Clone)]
42+
struct S2;
43+
44+
impl Sub for S1 {
45+
type Output = Self;
46+
47+
// S1SubS1
48+
fn sub(self, _rhs: Self) -> Self::Output {
49+
S1
50+
}
51+
}
52+
53+
impl Sub<S2> for S1 {
54+
type Output = S2;
55+
56+
// S1SubS2
57+
fn sub(self, _rhs: S2) -> Self::Output {
58+
S2
59+
}
60+
}
61+
62+
impl Sub<&S2> for S1 {
63+
type Output = <S1 as Sub<S2>>::Output;
64+
65+
// S1SubRefS2
66+
fn sub(self, other: &S2) -> <S1 as Sub<S2>>::Output {
67+
Sub::sub(self, *other) // $ target=S1SubS2 target=deref
68+
}
69+
}
70+
71+
fn foo() {
72+
let s1 = S1;
73+
let s2 = S2;
74+
let x = s1 - &s2; // $ target=S1SubRefS2 type=x:S2 $ SPURIOUS: type=x:S1
75+
}
76+
}

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

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4947,6 +4947,22 @@ inferCertainType
49474947
| regressions.rs:27:37:27:41 | vec_e | | {EXTERNAL LOCATION} | Vec |
49484948
| regressions.rs:27:37:27:41 | vec_e | A | {EXTERNAL LOCATION} | Global |
49494949
| regressions.rs:28:9:30:9 | { ... } | | {EXTERNAL LOCATION} | () |
4950+
| regressions.rs:48:16:48:19 | SelfParam | | regressions.rs:39:5:40:14 | S1 |
4951+
| regressions.rs:48:22:48:25 | _rhs | | regressions.rs:39:5:40:14 | S1 |
4952+
| regressions.rs:48:50:50:9 | { ... } | | regressions.rs:39:5:40:14 | S1 |
4953+
| regressions.rs:57:16:57:19 | SelfParam | | regressions.rs:39:5:40:14 | S1 |
4954+
| regressions.rs:57:22:57:25 | _rhs | | regressions.rs:41:5:42:14 | S2 |
4955+
| regressions.rs:57:48:59:9 | { ... } | | regressions.rs:41:5:42:14 | S2 |
4956+
| regressions.rs:66:16:66:19 | SelfParam | | regressions.rs:39:5:40:14 | S1 |
4957+
| regressions.rs:66:22:66:26 | other | | {EXTERNAL LOCATION} | & |
4958+
| regressions.rs:66:22:66:26 | other | TRef | regressions.rs:41:5:42:14 | S2 |
4959+
| regressions.rs:66:61:68:9 | { ... } | | regressions.rs:39:5:40:14 | S1 |
4960+
| regressions.rs:66:61:68:9 | { ... } | | regressions.rs:41:5:42:14 | S2 |
4961+
| regressions.rs:67:22:67:25 | self | | regressions.rs:39:5:40:14 | S1 |
4962+
| regressions.rs:67:29:67:33 | other | | {EXTERNAL LOCATION} | & |
4963+
| regressions.rs:67:29:67:33 | other | TRef | regressions.rs:41:5:42:14 | S2 |
4964+
| regressions.rs:71:14:75:5 | { ... } | | {EXTERNAL LOCATION} | () |
4965+
| regressions.rs:74:22:74:24 | &s2 | | {EXTERNAL LOCATION} | & |
49504966
inferType
49514967
| associated_types.rs:5:15:5:18 | SelfParam | | associated_types.rs:1:1:2:21 | Wrapper |
49524968
| associated_types.rs:5:15:5:18 | SelfParam | A | associated_types.rs:4:6:4:6 | A |
@@ -14789,4 +14805,36 @@ inferType
1478914805
| regressions.rs:32:9:32:13 | opt_e | | {EXTERNAL LOCATION} | Option |
1479014806
| regressions.rs:32:9:32:13 | opt_e | T | regressions.rs:5:5:7:5 | E |
1479114807
| regressions.rs:32:9:32:22 | opt_e.unwrap() | | regressions.rs:5:5:7:5 | E |
14808+
| regressions.rs:48:16:48:19 | SelfParam | | regressions.rs:39:5:40:14 | S1 |
14809+
| regressions.rs:48:22:48:25 | _rhs | | regressions.rs:39:5:40:14 | S1 |
14810+
| regressions.rs:48:50:50:9 | { ... } | | regressions.rs:39:5:40:14 | S1 |
14811+
| regressions.rs:49:13:49:14 | S1 | | regressions.rs:39:5:40:14 | S1 |
14812+
| regressions.rs:57:16:57:19 | SelfParam | | regressions.rs:39:5:40:14 | S1 |
14813+
| regressions.rs:57:22:57:25 | _rhs | | regressions.rs:41:5:42:14 | S2 |
14814+
| regressions.rs:57:48:59:9 | { ... } | | regressions.rs:41:5:42:14 | S2 |
14815+
| regressions.rs:58:13:58:14 | S2 | | regressions.rs:41:5:42:14 | S2 |
14816+
| regressions.rs:66:16:66:19 | SelfParam | | regressions.rs:39:5:40:14 | S1 |
14817+
| regressions.rs:66:22:66:26 | other | | {EXTERNAL LOCATION} | & |
14818+
| regressions.rs:66:22:66:26 | other | TRef | regressions.rs:41:5:42:14 | S2 |
14819+
| regressions.rs:66:61:68:9 | { ... } | | regressions.rs:39:5:40:14 | S1 |
14820+
| regressions.rs:66:61:68:9 | { ... } | | regressions.rs:41:5:42:14 | S2 |
14821+
| regressions.rs:67:13:67:34 | ...::sub(...) | | regressions.rs:39:5:40:14 | S1 |
14822+
| regressions.rs:67:13:67:34 | ...::sub(...) | | regressions.rs:41:5:42:14 | S2 |
14823+
| regressions.rs:67:22:67:25 | self | | regressions.rs:39:5:40:14 | S1 |
14824+
| regressions.rs:67:28:67:33 | * ... | | regressions.rs:41:5:42:14 | S2 |
14825+
| regressions.rs:67:29:67:33 | other | | {EXTERNAL LOCATION} | & |
14826+
| regressions.rs:67:29:67:33 | other | TRef | regressions.rs:41:5:42:14 | S2 |
14827+
| regressions.rs:71:14:75:5 | { ... } | | {EXTERNAL LOCATION} | () |
14828+
| regressions.rs:72:13:72:14 | s1 | | regressions.rs:39:5:40:14 | S1 |
14829+
| regressions.rs:72:18:72:19 | S1 | | regressions.rs:39:5:40:14 | S1 |
14830+
| regressions.rs:73:13:73:14 | s2 | | regressions.rs:41:5:42:14 | S2 |
14831+
| regressions.rs:73:18:73:19 | S2 | | regressions.rs:41:5:42:14 | S2 |
14832+
| regressions.rs:74:13:74:13 | x | | regressions.rs:39:5:40:14 | S1 |
14833+
| regressions.rs:74:13:74:13 | x | | regressions.rs:41:5:42:14 | S2 |
14834+
| regressions.rs:74:17:74:18 | s1 | | regressions.rs:39:5:40:14 | S1 |
14835+
| regressions.rs:74:17:74:24 | ... - ... | | regressions.rs:39:5:40:14 | S1 |
14836+
| regressions.rs:74:17:74:24 | ... - ... | | regressions.rs:41:5:42:14 | S2 |
14837+
| regressions.rs:74:22:74:24 | &s2 | | {EXTERNAL LOCATION} | & |
14838+
| regressions.rs:74:22:74:24 | &s2 | TRef | regressions.rs:41:5:42:14 | S2 |
14839+
| regressions.rs:74:23:74:24 | s2 | | regressions.rs:41:5:42:14 | S2 |
1479214840
testFailures

0 commit comments

Comments
 (0)