Skip to content

Commit 7b9ae9f

Browse files
committed
Rust: Add type inference regression test
1 parent 7c7886a commit 7b9ae9f

File tree

2 files changed

+78
-0
lines changed

2 files changed

+78
-0
lines changed

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

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -287,3 +287,44 @@ mod default_type_args {
287287
}
288288
}
289289
}
290+
291+
mod from_default {
292+
#[derive(Default)]
293+
struct S;
294+
295+
fn f() -> S {
296+
let x = Default::default(); // $ target=default type=x:S
297+
From::from(x) // $ target=from
298+
}
299+
300+
struct S1;
301+
302+
struct S2;
303+
304+
impl From<S> for S1 {
305+
// from1
306+
fn from(_: S) -> Self {
307+
S1
308+
}
309+
}
310+
311+
impl From<S2> for S1 {
312+
// from2
313+
fn from(_: S2) -> Self {
314+
S1
315+
}
316+
}
317+
318+
impl From<S> for S2 {
319+
// from3
320+
fn from(_: S) -> Self {
321+
S2
322+
}
323+
}
324+
325+
fn g(b: bool) -> S1 {
326+
let s = if b { S } else { Default::default() }; // $ target=default type=s:S
327+
let x = From::from(s); // $ target=from1 type=x:S1
328+
x
329+
}
330+
}

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

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3902,6 +3902,16 @@ inferCertainType
39023902
| overloading.rs:281:21:281:47 | ...::f(...) | | {EXTERNAL LOCATION} | i64 |
39033903
| overloading.rs:282:17:282:17 | x | | {EXTERNAL LOCATION} | i64 |
39043904
| overloading.rs:282:21:282:61 | ...::f(...) | | {EXTERNAL LOCATION} | i64 |
3905+
| overloading.rs:295:17:298:5 | { ... } | | overloading.rs:292:5:293:13 | S |
3906+
| overloading.rs:306:17:306:17 | _ | | overloading.rs:292:5:293:13 | S |
3907+
| overloading.rs:306:31:308:9 | { ... } | | overloading.rs:300:5:300:14 | S1 |
3908+
| overloading.rs:313:17:313:17 | _ | | overloading.rs:302:5:302:14 | S2 |
3909+
| overloading.rs:313:32:315:9 | { ... } | | overloading.rs:300:5:300:14 | S1 |
3910+
| overloading.rs:320:17:320:17 | _ | | overloading.rs:292:5:293:13 | S |
3911+
| overloading.rs:320:31:322:9 | { ... } | | overloading.rs:302:5:302:14 | S2 |
3912+
| overloading.rs:325:10:325:10 | b | | {EXTERNAL LOCATION} | bool |
3913+
| overloading.rs:325:25:329:5 | { ... } | | overloading.rs:300:5:300:14 | S1 |
3914+
| overloading.rs:326:20:326:20 | b | | {EXTERNAL LOCATION} | bool |
39053915
| pattern_matching.rs:13:26:133:1 | { ... } | | {EXTERNAL LOCATION} | Option |
39063916
| pattern_matching.rs:13:26:133:1 | { ... } | T | {EXTERNAL LOCATION} | () |
39073917
| pattern_matching.rs:15:5:18:5 | if ... {...} | | {EXTERNAL LOCATION} | () |
@@ -12309,6 +12319,33 @@ inferType
1230912319
| overloading.rs:286:13:286:16 | S(...) | T | {EXTERNAL LOCATION} | i32 |
1231012320
| overloading.rs:286:13:286:16 | S(...) | T | {EXTERNAL LOCATION} | i64 |
1231112321
| overloading.rs:286:15:286:15 | 0 | | {EXTERNAL LOCATION} | i32 |
12322+
| overloading.rs:295:17:298:5 | { ... } | | overloading.rs:292:5:293:13 | S |
12323+
| overloading.rs:296:13:296:13 | x | | overloading.rs:292:5:293:13 | S |
12324+
| overloading.rs:296:17:296:34 | ...::default(...) | | overloading.rs:292:5:293:13 | S |
12325+
| overloading.rs:297:9:297:21 | ...::from(...) | | overloading.rs:292:5:293:13 | S |
12326+
| overloading.rs:297:20:297:20 | x | | overloading.rs:292:5:293:13 | S |
12327+
| overloading.rs:306:17:306:17 | _ | | overloading.rs:292:5:293:13 | S |
12328+
| overloading.rs:306:31:308:9 | { ... } | | overloading.rs:300:5:300:14 | S1 |
12329+
| overloading.rs:307:13:307:14 | S1 | | overloading.rs:300:5:300:14 | S1 |
12330+
| overloading.rs:313:17:313:17 | _ | | overloading.rs:302:5:302:14 | S2 |
12331+
| overloading.rs:313:32:315:9 | { ... } | | overloading.rs:300:5:300:14 | S1 |
12332+
| overloading.rs:314:13:314:14 | S1 | | overloading.rs:300:5:300:14 | S1 |
12333+
| overloading.rs:320:17:320:17 | _ | | overloading.rs:292:5:293:13 | S |
12334+
| overloading.rs:320:31:322:9 | { ... } | | overloading.rs:302:5:302:14 | S2 |
12335+
| overloading.rs:321:13:321:14 | S2 | | overloading.rs:302:5:302:14 | S2 |
12336+
| overloading.rs:325:10:325:10 | b | | {EXTERNAL LOCATION} | bool |
12337+
| overloading.rs:325:25:329:5 | { ... } | | overloading.rs:300:5:300:14 | S1 |
12338+
| overloading.rs:326:13:326:13 | s | | overloading.rs:292:5:293:13 | S |
12339+
| overloading.rs:326:17:326:54 | if b {...} else {...} | | overloading.rs:292:5:293:13 | S |
12340+
| overloading.rs:326:20:326:20 | b | | {EXTERNAL LOCATION} | bool |
12341+
| overloading.rs:326:22:326:26 | { ... } | | overloading.rs:292:5:293:13 | S |
12342+
| overloading.rs:326:24:326:24 | S | | overloading.rs:292:5:293:13 | S |
12343+
| overloading.rs:326:33:326:54 | { ... } | | overloading.rs:292:5:293:13 | S |
12344+
| overloading.rs:326:35:326:52 | ...::default(...) | | overloading.rs:292:5:293:13 | S |
12345+
| overloading.rs:327:13:327:13 | x | | overloading.rs:300:5:300:14 | S1 |
12346+
| overloading.rs:327:17:327:29 | ...::from(...) | | overloading.rs:300:5:300:14 | S1 |
12347+
| overloading.rs:327:28:327:28 | s | | overloading.rs:292:5:293:13 | S |
12348+
| overloading.rs:328:9:328:9 | x | | overloading.rs:300:5:300:14 | S1 |
1231212349
| pattern_matching.rs:13:26:133:1 | { ... } | | {EXTERNAL LOCATION} | Option |
1231312350
| pattern_matching.rs:13:26:133:1 | { ... } | T | {EXTERNAL LOCATION} | () |
1231412351
| pattern_matching.rs:14:9:14:13 | value | | {EXTERNAL LOCATION} | Option |

0 commit comments

Comments
 (0)