Skip to content

Commit 32aaac2

Browse files
committed
Rust: Add type inference regression test
1 parent 2dc7576 commit 32aaac2

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
@@ -359,3 +359,44 @@ mod default_type_args {
359359
}
360360
}
361361
}
362+
363+
mod from_default {
364+
#[derive(Default)]
365+
struct S;
366+
367+
fn f() -> S {
368+
let x = Default::default(); // $ target=default type=x:S
369+
From::from(x) // $ target=from
370+
}
371+
372+
struct S1;
373+
374+
struct S2;
375+
376+
impl From<S> for S1 {
377+
// from1
378+
fn from(_: S) -> Self {
379+
S1
380+
}
381+
}
382+
383+
impl From<S2> for S1 {
384+
// from2
385+
fn from(_: S2) -> Self {
386+
S1
387+
}
388+
}
389+
390+
impl From<S> for S2 {
391+
// from3
392+
fn from(_: S) -> Self {
393+
S2
394+
}
395+
}
396+
397+
fn g(b: bool) -> S1 {
398+
let s = if b { S } else { Default::default() }; // $ target=default type=s:S
399+
let x = From::from(s); // $ target=from1 type=x:S1
400+
x
401+
}
402+
}

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

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3965,6 +3965,16 @@ inferCertainType
39653965
| overloading.rs:353:21:353:47 | ...::f(...) | | {EXTERNAL LOCATION} | i64 |
39663966
| overloading.rs:354:17:354:17 | x | | {EXTERNAL LOCATION} | i64 |
39673967
| overloading.rs:354:21:354:61 | ...::f(...) | | {EXTERNAL LOCATION} | i64 |
3968+
| overloading.rs:367:17:370:5 | { ... } | | overloading.rs:364:5:365:13 | S |
3969+
| overloading.rs:378:17:378:17 | _ | | overloading.rs:364:5:365:13 | S |
3970+
| overloading.rs:378:31:380:9 | { ... } | | overloading.rs:372:5:372:14 | S1 |
3971+
| overloading.rs:385:17:385:17 | _ | | overloading.rs:374:5:374:14 | S2 |
3972+
| overloading.rs:385:32:387:9 | { ... } | | overloading.rs:372:5:372:14 | S1 |
3973+
| overloading.rs:392:17:392:17 | _ | | overloading.rs:364:5:365:13 | S |
3974+
| overloading.rs:392:31:394:9 | { ... } | | overloading.rs:374:5:374:14 | S2 |
3975+
| overloading.rs:397:10:397:10 | b | | {EXTERNAL LOCATION} | bool |
3976+
| overloading.rs:397:25:401:5 | { ... } | | overloading.rs:372:5:372:14 | S1 |
3977+
| overloading.rs:398:20:398:20 | b | | {EXTERNAL LOCATION} | bool |
39683978
| pattern_matching.rs:13:26:133:1 | { ... } | | {EXTERNAL LOCATION} | Option |
39693979
| pattern_matching.rs:13:26:133:1 | { ... } | T | {EXTERNAL LOCATION} | () |
39703980
| pattern_matching.rs:15:5:18:5 | if ... {...} | | {EXTERNAL LOCATION} | () |
@@ -12463,6 +12473,33 @@ inferType
1246312473
| overloading.rs:358:13:358:16 | S(...) | T | {EXTERNAL LOCATION} | i32 |
1246412474
| overloading.rs:358:13:358:16 | S(...) | T | {EXTERNAL LOCATION} | i64 |
1246512475
| overloading.rs:358:15:358:15 | 0 | | {EXTERNAL LOCATION} | i32 |
12476+
| overloading.rs:367:17:370:5 | { ... } | | overloading.rs:364:5:365:13 | S |
12477+
| overloading.rs:368:13:368:13 | x | | overloading.rs:364:5:365:13 | S |
12478+
| overloading.rs:368:17:368:34 | ...::default(...) | | overloading.rs:364:5:365:13 | S |
12479+
| overloading.rs:369:9:369:21 | ...::from(...) | | overloading.rs:364:5:365:13 | S |
12480+
| overloading.rs:369:20:369:20 | x | | overloading.rs:364:5:365:13 | S |
12481+
| overloading.rs:378:17:378:17 | _ | | overloading.rs:364:5:365:13 | S |
12482+
| overloading.rs:378:31:380:9 | { ... } | | overloading.rs:372:5:372:14 | S1 |
12483+
| overloading.rs:379:13:379:14 | S1 | | overloading.rs:372:5:372:14 | S1 |
12484+
| overloading.rs:385:17:385:17 | _ | | overloading.rs:374:5:374:14 | S2 |
12485+
| overloading.rs:385:32:387:9 | { ... } | | overloading.rs:372:5:372:14 | S1 |
12486+
| overloading.rs:386:13:386:14 | S1 | | overloading.rs:372:5:372:14 | S1 |
12487+
| overloading.rs:392:17:392:17 | _ | | overloading.rs:364:5:365:13 | S |
12488+
| overloading.rs:392:31:394:9 | { ... } | | overloading.rs:374:5:374:14 | S2 |
12489+
| overloading.rs:393:13:393:14 | S2 | | overloading.rs:374:5:374:14 | S2 |
12490+
| overloading.rs:397:10:397:10 | b | | {EXTERNAL LOCATION} | bool |
12491+
| overloading.rs:397:25:401:5 | { ... } | | overloading.rs:372:5:372:14 | S1 |
12492+
| overloading.rs:398:13:398:13 | s | | overloading.rs:364:5:365:13 | S |
12493+
| overloading.rs:398:17:398:54 | if b {...} else {...} | | overloading.rs:364:5:365:13 | S |
12494+
| overloading.rs:398:20:398:20 | b | | {EXTERNAL LOCATION} | bool |
12495+
| overloading.rs:398:22:398:26 | { ... } | | overloading.rs:364:5:365:13 | S |
12496+
| overloading.rs:398:24:398:24 | S | | overloading.rs:364:5:365:13 | S |
12497+
| overloading.rs:398:33:398:54 | { ... } | | overloading.rs:364:5:365:13 | S |
12498+
| overloading.rs:398:35:398:52 | ...::default(...) | | overloading.rs:364:5:365:13 | S |
12499+
| overloading.rs:399:13:399:13 | x | | overloading.rs:372:5:372:14 | S1 |
12500+
| overloading.rs:399:17:399:29 | ...::from(...) | | overloading.rs:372:5:372:14 | S1 |
12501+
| overloading.rs:399:28:399:28 | s | | overloading.rs:364:5:365:13 | S |
12502+
| overloading.rs:400:9:400:9 | x | | overloading.rs:372:5:372:14 | S1 |
1246612503
| pattern_matching.rs:13:26:133:1 | { ... } | | {EXTERNAL LOCATION} | Option |
1246712504
| pattern_matching.rs:13:26:133:1 | { ... } | T | {EXTERNAL LOCATION} | () |
1246812505
| pattern_matching.rs:14:9:14:13 | value | | {EXTERNAL LOCATION} | Option |

0 commit comments

Comments
 (0)