Skip to content

Commit cceda3b

Browse files
committed
Rust: Add type inference regression test
1 parent ea3c2d4 commit cceda3b

File tree

3 files changed

+114
-0
lines changed

3 files changed

+114
-0
lines changed
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,4 @@
11
multipleResolvedTargets
22
| main.rs:2720:13:2720:17 | x.f() |
3+
| overloading.rs:160:9:160:21 | ...::from(...) |
4+
| overloading.rs:190:17:190:29 | ...::from(...) |

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

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -150,3 +150,44 @@ pub mod impl_overlap {
150150
S5::m(&S5(true)); // $ target=MyTrait1::m
151151
}
152152
}
153+
154+
mod from_default {
155+
#[derive(Default)]
156+
struct S;
157+
158+
fn f() -> S {
159+
let x = Default::default(); // $ target=default type=x:S
160+
From::from(x) // $ target=from
161+
}
162+
163+
struct S1;
164+
165+
struct S2;
166+
167+
impl From<S> for S1 {
168+
// from1
169+
fn from(_: S) -> Self {
170+
S1
171+
}
172+
}
173+
174+
impl From<S2> for S1 {
175+
// from2
176+
fn from(_: S2) -> Self {
177+
S1
178+
}
179+
}
180+
181+
impl From<S> for S2 {
182+
// from3
183+
fn from(_: S) -> Self {
184+
S2
185+
}
186+
}
187+
188+
fn g(b: bool) -> S1 {
189+
let s = if b { S } else { Default::default() }; // $ target=default type=s:S
190+
let x = From::from(s); // $ target=from1 type=x:S1
191+
x
192+
}
193+
}

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

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3769,6 +3769,16 @@ inferCertainType
37693769
| overloading.rs:150:9:150:24 | ...::m(...) | | {EXTERNAL LOCATION} | () |
37703770
| overloading.rs:150:15:150:23 | &... | | {EXTERNAL LOCATION} | & |
37713771
| overloading.rs:150:19:150:22 | true | | {EXTERNAL LOCATION} | bool |
3772+
| overloading.rs:158:17:161:5 | { ... } | | overloading.rs:155:5:156:13 | S |
3773+
| overloading.rs:169:17:169:17 | _ | | overloading.rs:155:5:156:13 | S |
3774+
| overloading.rs:169:31:171:9 | { ... } | | overloading.rs:163:5:163:14 | S1 |
3775+
| overloading.rs:176:17:176:17 | _ | | overloading.rs:165:5:165:14 | S2 |
3776+
| overloading.rs:176:32:178:9 | { ... } | | overloading.rs:163:5:163:14 | S1 |
3777+
| overloading.rs:183:17:183:17 | _ | | overloading.rs:155:5:156:13 | S |
3778+
| overloading.rs:183:31:185:9 | { ... } | | overloading.rs:165:5:165:14 | S2 |
3779+
| overloading.rs:188:10:188:10 | b | | {EXTERNAL LOCATION} | bool |
3780+
| overloading.rs:188:25:192:5 | { ... } | | overloading.rs:163:5:163:14 | S1 |
3781+
| overloading.rs:189:20:189:20 | b | | {EXTERNAL LOCATION} | bool |
37723782
| pattern_matching.rs:13:26:133:1 | { ... } | | {EXTERNAL LOCATION} | Option |
37733783
| pattern_matching.rs:13:26:133:1 | { ... } | T | {EXTERNAL LOCATION} | () |
37743784
| pattern_matching.rs:15:5:18:5 | if ... {...} | | {EXTERNAL LOCATION} | () |
@@ -11933,6 +11943,61 @@ inferType
1193311943
| overloading.rs:150:16:150:23 | S5(...) | | overloading.rs:111:5:112:22 | S5 |
1193411944
| overloading.rs:150:16:150:23 | S5(...) | T5 | {EXTERNAL LOCATION} | bool |
1193511945
| overloading.rs:150:19:150:22 | true | | {EXTERNAL LOCATION} | bool |
11946+
| overloading.rs:158:17:161:5 | { ... } | | overloading.rs:155:5:156:13 | S |
11947+
| overloading.rs:159:13:159:13 | x | | overloading.rs:155:5:156:13 | S |
11948+
| overloading.rs:159:13:159:13 | x | | overloading.rs:163:5:163:14 | S1 |
11949+
| overloading.rs:159:13:159:13 | x | | overloading.rs:165:5:165:14 | S2 |
11950+
| overloading.rs:159:17:159:34 | ...::default(...) | | overloading.rs:155:5:156:13 | S |
11951+
| overloading.rs:159:17:159:34 | ...::default(...) | | overloading.rs:163:5:163:14 | S1 |
11952+
| overloading.rs:159:17:159:34 | ...::default(...) | | overloading.rs:165:5:165:14 | S2 |
11953+
| overloading.rs:160:9:160:21 | ...::from(...) | | overloading.rs:155:5:156:13 | S |
11954+
| overloading.rs:160:9:160:21 | ...::from(...) | | overloading.rs:163:5:163:14 | S1 |
11955+
| overloading.rs:160:9:160:21 | ...::from(...) | | overloading.rs:165:5:165:14 | S2 |
11956+
| overloading.rs:160:20:160:20 | x | | overloading.rs:155:5:156:13 | S |
11957+
| overloading.rs:160:20:160:20 | x | | overloading.rs:163:5:163:14 | S1 |
11958+
| overloading.rs:160:20:160:20 | x | | overloading.rs:165:5:165:14 | S2 |
11959+
| overloading.rs:169:17:169:17 | _ | | overloading.rs:155:5:156:13 | S |
11960+
| overloading.rs:169:31:171:9 | { ... } | | overloading.rs:163:5:163:14 | S1 |
11961+
| overloading.rs:170:13:170:14 | S1 | | overloading.rs:163:5:163:14 | S1 |
11962+
| overloading.rs:176:17:176:17 | _ | | overloading.rs:165:5:165:14 | S2 |
11963+
| overloading.rs:176:32:178:9 | { ... } | | overloading.rs:163:5:163:14 | S1 |
11964+
| overloading.rs:177:13:177:14 | S1 | | overloading.rs:163:5:163:14 | S1 |
11965+
| overloading.rs:183:17:183:17 | _ | | overloading.rs:155:5:156:13 | S |
11966+
| overloading.rs:183:31:185:9 | { ... } | | overloading.rs:165:5:165:14 | S2 |
11967+
| overloading.rs:184:13:184:14 | S2 | | overloading.rs:165:5:165:14 | S2 |
11968+
| overloading.rs:188:10:188:10 | b | | {EXTERNAL LOCATION} | bool |
11969+
| overloading.rs:188:25:192:5 | { ... } | | overloading.rs:163:5:163:14 | S1 |
11970+
| overloading.rs:189:13:189:13 | s | | overloading.rs:155:5:156:13 | S |
11971+
| overloading.rs:189:13:189:13 | s | | overloading.rs:163:5:163:14 | S1 |
11972+
| overloading.rs:189:13:189:13 | s | | overloading.rs:165:5:165:14 | S2 |
11973+
| overloading.rs:189:17:189:54 | if b {...} else {...} | | overloading.rs:155:5:156:13 | S |
11974+
| overloading.rs:189:17:189:54 | if b {...} else {...} | | overloading.rs:163:5:163:14 | S1 |
11975+
| overloading.rs:189:17:189:54 | if b {...} else {...} | | overloading.rs:165:5:165:14 | S2 |
11976+
| overloading.rs:189:20:189:20 | b | | {EXTERNAL LOCATION} | bool |
11977+
| overloading.rs:189:22:189:26 | { ... } | | overloading.rs:155:5:156:13 | S |
11978+
| overloading.rs:189:22:189:26 | { ... } | | overloading.rs:163:5:163:14 | S1 |
11979+
| overloading.rs:189:22:189:26 | { ... } | | overloading.rs:165:5:165:14 | S2 |
11980+
| overloading.rs:189:24:189:24 | S | | overloading.rs:155:5:156:13 | S |
11981+
| overloading.rs:189:24:189:24 | S | | overloading.rs:163:5:163:14 | S1 |
11982+
| overloading.rs:189:24:189:24 | S | | overloading.rs:165:5:165:14 | S2 |
11983+
| overloading.rs:189:33:189:54 | { ... } | | overloading.rs:155:5:156:13 | S |
11984+
| overloading.rs:189:33:189:54 | { ... } | | overloading.rs:163:5:163:14 | S1 |
11985+
| overloading.rs:189:33:189:54 | { ... } | | overloading.rs:165:5:165:14 | S2 |
11986+
| overloading.rs:189:35:189:52 | ...::default(...) | | overloading.rs:155:5:156:13 | S |
11987+
| overloading.rs:189:35:189:52 | ...::default(...) | | overloading.rs:163:5:163:14 | S1 |
11988+
| overloading.rs:189:35:189:52 | ...::default(...) | | overloading.rs:165:5:165:14 | S2 |
11989+
| overloading.rs:190:13:190:13 | x | | overloading.rs:155:5:156:13 | S |
11990+
| overloading.rs:190:13:190:13 | x | | overloading.rs:163:5:163:14 | S1 |
11991+
| overloading.rs:190:13:190:13 | x | | overloading.rs:165:5:165:14 | S2 |
11992+
| overloading.rs:190:17:190:29 | ...::from(...) | | overloading.rs:155:5:156:13 | S |
11993+
| overloading.rs:190:17:190:29 | ...::from(...) | | overloading.rs:163:5:163:14 | S1 |
11994+
| overloading.rs:190:17:190:29 | ...::from(...) | | overloading.rs:165:5:165:14 | S2 |
11995+
| overloading.rs:190:28:190:28 | s | | overloading.rs:155:5:156:13 | S |
11996+
| overloading.rs:190:28:190:28 | s | | overloading.rs:163:5:163:14 | S1 |
11997+
| overloading.rs:190:28:190:28 | s | | overloading.rs:165:5:165:14 | S2 |
11998+
| overloading.rs:191:9:191:9 | x | | overloading.rs:155:5:156:13 | S |
11999+
| overloading.rs:191:9:191:9 | x | | overloading.rs:163:5:163:14 | S1 |
12000+
| overloading.rs:191:9:191:9 | x | | overloading.rs:165:5:165:14 | S2 |
1193612001
| pattern_matching.rs:13:26:133:1 | { ... } | | {EXTERNAL LOCATION} | Option |
1193712002
| pattern_matching.rs:13:26:133:1 | { ... } | T | {EXTERNAL LOCATION} | () |
1193812003
| pattern_matching.rs:14:9:14:13 | value | | {EXTERNAL LOCATION} | Option |
@@ -13983,3 +14048,9 @@ inferType
1398314048
| raw_pointer.rs:59:5:59:30 | raw_type_from_deref(...) | | {EXTERNAL LOCATION} | () |
1398414049
| raw_pointer.rs:59:25:59:29 | false | | {EXTERNAL LOCATION} | bool |
1398514050
testFailures
14051+
| overloading.rs:160:9:160:21 | ...::from(...) | Unexpected result: target=from1 |
14052+
| overloading.rs:160:9:160:21 | ...::from(...) | Unexpected result: target=from2 |
14053+
| overloading.rs:160:9:160:21 | ...::from(...) | Unexpected result: target=from3 |
14054+
| overloading.rs:190:17:190:29 | ...::from(...) | Unexpected result: target=from |
14055+
| overloading.rs:190:17:190:29 | ...::from(...) | Unexpected result: target=from2 |
14056+
| overloading.rs:190:17:190:29 | ...::from(...) | Unexpected result: target=from3 |

0 commit comments

Comments
 (0)