Skip to content

Commit 18da454

Browse files
committed
Rust: Add type inference regression test
1 parent fe3381c commit 18da454

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,3 +1,5 @@
11
multipleResolvedTargets
22
| main.rs:2720:13:2720:17 | x.f() |
33
| overloading.rs:197:22:197:30 | x.g(...) |
4+
| overloading.rs:207:9:207:21 | ...::from(...) |
5+
| overloading.rs:237:17:237: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
@@ -197,3 +197,44 @@ mod impl_overlap2 {
197197
let z: i64 = x.g(0i32); // $ target=g4 $ SPURIOUS: target=g3
198198
}
199199
}
200+
201+
mod from_default {
202+
#[derive(Default)]
203+
struct S;
204+
205+
fn f() -> S {
206+
let x = Default::default(); // $ target=default type=x:S
207+
From::from(x) // $ target=from
208+
}
209+
210+
struct S1;
211+
212+
struct S2;
213+
214+
impl From<S> for S1 {
215+
// from1
216+
fn from(_: S) -> Self {
217+
S1
218+
}
219+
}
220+
221+
impl From<S2> for S1 {
222+
// from2
223+
fn from(_: S2) -> Self {
224+
S1
225+
}
226+
}
227+
228+
impl From<S> for S2 {
229+
// from3
230+
fn from(_: S) -> Self {
231+
S2
232+
}
233+
}
234+
235+
fn g(b: bool) -> S1 {
236+
let s = if b { S } else { Default::default() }; // $ target=default type=s:S
237+
let x = From::from(s); // $ target=from1 type=x:S1
238+
x
239+
}
240+
}

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

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3792,6 +3792,16 @@ inferCertainType
37923792
| overloading.rs:196:13:196:13 | z | | {EXTERNAL LOCATION} | i64 |
37933793
| overloading.rs:197:13:197:13 | z | | {EXTERNAL LOCATION} | i64 |
37943794
| overloading.rs:197:26:197:29 | 0i32 | | {EXTERNAL LOCATION} | i32 |
3795+
| overloading.rs:205:17:208:5 | { ... } | | overloading.rs:202:5:203:13 | S |
3796+
| overloading.rs:216:17:216:17 | _ | | overloading.rs:202:5:203:13 | S |
3797+
| overloading.rs:216:31:218:9 | { ... } | | overloading.rs:210:5:210:14 | S1 |
3798+
| overloading.rs:223:17:223:17 | _ | | overloading.rs:212:5:212:14 | S2 |
3799+
| overloading.rs:223:32:225:9 | { ... } | | overloading.rs:210:5:210:14 | S1 |
3800+
| overloading.rs:230:17:230:17 | _ | | overloading.rs:202:5:203:13 | S |
3801+
| overloading.rs:230:31:232:9 | { ... } | | overloading.rs:212:5:212:14 | S2 |
3802+
| overloading.rs:235:10:235:10 | b | | {EXTERNAL LOCATION} | bool |
3803+
| overloading.rs:235:25:239:5 | { ... } | | overloading.rs:210:5:210:14 | S1 |
3804+
| overloading.rs:236:20:236:20 | b | | {EXTERNAL LOCATION} | bool |
37953805
| pattern_matching.rs:13:26:133:1 | { ... } | | {EXTERNAL LOCATION} | Option |
37963806
| pattern_matching.rs:13:26:133:1 | { ... } | T | {EXTERNAL LOCATION} | () |
37973807
| pattern_matching.rs:15:5:18:5 | if ... {...} | | {EXTERNAL LOCATION} | () |
@@ -12000,6 +12010,61 @@ inferType
1200012010
| overloading.rs:197:22:197:30 | x.g(...) | | {EXTERNAL LOCATION} | i32 |
1200112011
| overloading.rs:197:22:197:30 | x.g(...) | | {EXTERNAL LOCATION} | i64 |
1200212012
| overloading.rs:197:26:197:29 | 0i32 | | {EXTERNAL LOCATION} | i32 |
12013+
| overloading.rs:205:17:208:5 | { ... } | | overloading.rs:202:5:203:13 | S |
12014+
| overloading.rs:206:13:206:13 | x | | overloading.rs:202:5:203:13 | S |
12015+
| overloading.rs:206:13:206:13 | x | | overloading.rs:210:5:210:14 | S1 |
12016+
| overloading.rs:206:13:206:13 | x | | overloading.rs:212:5:212:14 | S2 |
12017+
| overloading.rs:206:17:206:34 | ...::default(...) | | overloading.rs:202:5:203:13 | S |
12018+
| overloading.rs:206:17:206:34 | ...::default(...) | | overloading.rs:210:5:210:14 | S1 |
12019+
| overloading.rs:206:17:206:34 | ...::default(...) | | overloading.rs:212:5:212:14 | S2 |
12020+
| overloading.rs:207:9:207:21 | ...::from(...) | | overloading.rs:202:5:203:13 | S |
12021+
| overloading.rs:207:9:207:21 | ...::from(...) | | overloading.rs:210:5:210:14 | S1 |
12022+
| overloading.rs:207:9:207:21 | ...::from(...) | | overloading.rs:212:5:212:14 | S2 |
12023+
| overloading.rs:207:20:207:20 | x | | overloading.rs:202:5:203:13 | S |
12024+
| overloading.rs:207:20:207:20 | x | | overloading.rs:210:5:210:14 | S1 |
12025+
| overloading.rs:207:20:207:20 | x | | overloading.rs:212:5:212:14 | S2 |
12026+
| overloading.rs:216:17:216:17 | _ | | overloading.rs:202:5:203:13 | S |
12027+
| overloading.rs:216:31:218:9 | { ... } | | overloading.rs:210:5:210:14 | S1 |
12028+
| overloading.rs:217:13:217:14 | S1 | | overloading.rs:210:5:210:14 | S1 |
12029+
| overloading.rs:223:17:223:17 | _ | | overloading.rs:212:5:212:14 | S2 |
12030+
| overloading.rs:223:32:225:9 | { ... } | | overloading.rs:210:5:210:14 | S1 |
12031+
| overloading.rs:224:13:224:14 | S1 | | overloading.rs:210:5:210:14 | S1 |
12032+
| overloading.rs:230:17:230:17 | _ | | overloading.rs:202:5:203:13 | S |
12033+
| overloading.rs:230:31:232:9 | { ... } | | overloading.rs:212:5:212:14 | S2 |
12034+
| overloading.rs:231:13:231:14 | S2 | | overloading.rs:212:5:212:14 | S2 |
12035+
| overloading.rs:235:10:235:10 | b | | {EXTERNAL LOCATION} | bool |
12036+
| overloading.rs:235:25:239:5 | { ... } | | overloading.rs:210:5:210:14 | S1 |
12037+
| overloading.rs:236:13:236:13 | s | | overloading.rs:202:5:203:13 | S |
12038+
| overloading.rs:236:13:236:13 | s | | overloading.rs:210:5:210:14 | S1 |
12039+
| overloading.rs:236:13:236:13 | s | | overloading.rs:212:5:212:14 | S2 |
12040+
| overloading.rs:236:17:236:54 | if b {...} else {...} | | overloading.rs:202:5:203:13 | S |
12041+
| overloading.rs:236:17:236:54 | if b {...} else {...} | | overloading.rs:210:5:210:14 | S1 |
12042+
| overloading.rs:236:17:236:54 | if b {...} else {...} | | overloading.rs:212:5:212:14 | S2 |
12043+
| overloading.rs:236:20:236:20 | b | | {EXTERNAL LOCATION} | bool |
12044+
| overloading.rs:236:22:236:26 | { ... } | | overloading.rs:202:5:203:13 | S |
12045+
| overloading.rs:236:22:236:26 | { ... } | | overloading.rs:210:5:210:14 | S1 |
12046+
| overloading.rs:236:22:236:26 | { ... } | | overloading.rs:212:5:212:14 | S2 |
12047+
| overloading.rs:236:24:236:24 | S | | overloading.rs:202:5:203:13 | S |
12048+
| overloading.rs:236:24:236:24 | S | | overloading.rs:210:5:210:14 | S1 |
12049+
| overloading.rs:236:24:236:24 | S | | overloading.rs:212:5:212:14 | S2 |
12050+
| overloading.rs:236:33:236:54 | { ... } | | overloading.rs:202:5:203:13 | S |
12051+
| overloading.rs:236:33:236:54 | { ... } | | overloading.rs:210:5:210:14 | S1 |
12052+
| overloading.rs:236:33:236:54 | { ... } | | overloading.rs:212:5:212:14 | S2 |
12053+
| overloading.rs:236:35:236:52 | ...::default(...) | | overloading.rs:202:5:203:13 | S |
12054+
| overloading.rs:236:35:236:52 | ...::default(...) | | overloading.rs:210:5:210:14 | S1 |
12055+
| overloading.rs:236:35:236:52 | ...::default(...) | | overloading.rs:212:5:212:14 | S2 |
12056+
| overloading.rs:237:13:237:13 | x | | overloading.rs:202:5:203:13 | S |
12057+
| overloading.rs:237:13:237:13 | x | | overloading.rs:210:5:210:14 | S1 |
12058+
| overloading.rs:237:13:237:13 | x | | overloading.rs:212:5:212:14 | S2 |
12059+
| overloading.rs:237:17:237:29 | ...::from(...) | | overloading.rs:202:5:203:13 | S |
12060+
| overloading.rs:237:17:237:29 | ...::from(...) | | overloading.rs:210:5:210:14 | S1 |
12061+
| overloading.rs:237:17:237:29 | ...::from(...) | | overloading.rs:212:5:212:14 | S2 |
12062+
| overloading.rs:237:28:237:28 | s | | overloading.rs:202:5:203:13 | S |
12063+
| overloading.rs:237:28:237:28 | s | | overloading.rs:210:5:210:14 | S1 |
12064+
| overloading.rs:237:28:237:28 | s | | overloading.rs:212:5:212:14 | S2 |
12065+
| overloading.rs:238:9:238:9 | x | | overloading.rs:202:5:203:13 | S |
12066+
| overloading.rs:238:9:238:9 | x | | overloading.rs:210:5:210:14 | S1 |
12067+
| overloading.rs:238:9:238:9 | x | | overloading.rs:212:5:212:14 | S2 |
1200312068
| pattern_matching.rs:13:26:133:1 | { ... } | | {EXTERNAL LOCATION} | Option |
1200412069
| pattern_matching.rs:13:26:133:1 | { ... } | T | {EXTERNAL LOCATION} | () |
1200512070
| pattern_matching.rs:14:9:14:13 | value | | {EXTERNAL LOCATION} | Option |
@@ -14050,3 +14115,9 @@ inferType
1405014115
| raw_pointer.rs:59:5:59:30 | raw_type_from_deref(...) | | {EXTERNAL LOCATION} | () |
1405114116
| raw_pointer.rs:59:25:59:29 | false | | {EXTERNAL LOCATION} | bool |
1405214117
testFailures
14118+
| overloading.rs:207:9:207:21 | ...::from(...) | Unexpected result: target=from1 |
14119+
| overloading.rs:207:9:207:21 | ...::from(...) | Unexpected result: target=from2 |
14120+
| overloading.rs:207:9:207:21 | ...::from(...) | Unexpected result: target=from3 |
14121+
| overloading.rs:237:17:237:29 | ...::from(...) | Unexpected result: target=from |
14122+
| overloading.rs:237:17:237:29 | ...::from(...) | Unexpected result: target=from2 |
14123+
| overloading.rs:237:17:237:29 | ...::from(...) | Unexpected result: target=from3 |

0 commit comments

Comments
 (0)