Skip to content

Commit ee7c24b

Browse files
committed
Rust: Add type inference regression test
1 parent b1917d3 commit ee7c24b

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
@@ -236,3 +236,44 @@ mod default_type_args {
236236
}
237237
}
238238
}
239+
240+
mod from_default {
241+
#[derive(Default)]
242+
struct S;
243+
244+
fn f() -> S {
245+
let x = Default::default(); // $ target=default type=x:S
246+
From::from(x) // $ target=from
247+
}
248+
249+
struct S1;
250+
251+
struct S2;
252+
253+
impl From<S> for S1 {
254+
// from1
255+
fn from(_: S) -> Self {
256+
S1
257+
}
258+
}
259+
260+
impl From<S2> for S1 {
261+
// from2
262+
fn from(_: S2) -> Self {
263+
S1
264+
}
265+
}
266+
267+
impl From<S> for S2 {
268+
// from3
269+
fn from(_: S) -> Self {
270+
S2
271+
}
272+
}
273+
274+
fn g(b: bool) -> S1 {
275+
let s = if b { S } else { Default::default() }; // $ target=default type=s:S
276+
let x = From::from(s); // $ target=from1 type=x:S1
277+
x
278+
}
279+
}

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

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3892,6 +3892,16 @@ inferCertainType
38923892
| overloading.rs:230:21:230:47 | ...::f(...) | | {EXTERNAL LOCATION} | i64 |
38933893
| overloading.rs:231:17:231:17 | x | | {EXTERNAL LOCATION} | i64 |
38943894
| overloading.rs:231:21:231:61 | ...::f(...) | | {EXTERNAL LOCATION} | i64 |
3895+
| overloading.rs:244:17:247:5 | { ... } | | overloading.rs:241:5:242:13 | S |
3896+
| overloading.rs:255:17:255:17 | _ | | overloading.rs:241:5:242:13 | S |
3897+
| overloading.rs:255:31:257:9 | { ... } | | overloading.rs:249:5:249:14 | S1 |
3898+
| overloading.rs:262:17:262:17 | _ | | overloading.rs:251:5:251:14 | S2 |
3899+
| overloading.rs:262:32:264:9 | { ... } | | overloading.rs:249:5:249:14 | S1 |
3900+
| overloading.rs:269:17:269:17 | _ | | overloading.rs:241:5:242:13 | S |
3901+
| overloading.rs:269:31:271:9 | { ... } | | overloading.rs:251:5:251:14 | S2 |
3902+
| overloading.rs:274:10:274:10 | b | | {EXTERNAL LOCATION} | bool |
3903+
| overloading.rs:274:25:278:5 | { ... } | | overloading.rs:249:5:249:14 | S1 |
3904+
| overloading.rs:275:20:275:20 | b | | {EXTERNAL LOCATION} | bool |
38953905
| pattern_matching.rs:13:26:133:1 | { ... } | | {EXTERNAL LOCATION} | Option |
38963906
| pattern_matching.rs:13:26:133:1 | { ... } | T | {EXTERNAL LOCATION} | () |
38973907
| pattern_matching.rs:15:5:18:5 | if ... {...} | | {EXTERNAL LOCATION} | () |
@@ -12282,6 +12292,33 @@ inferType
1228212292
| overloading.rs:235:13:235:16 | S(...) | T | {EXTERNAL LOCATION} | i32 |
1228312293
| overloading.rs:235:13:235:16 | S(...) | T | {EXTERNAL LOCATION} | i64 |
1228412294
| overloading.rs:235:15:235:15 | 0 | | {EXTERNAL LOCATION} | i32 |
12295+
| overloading.rs:244:17:247:5 | { ... } | | overloading.rs:241:5:242:13 | S |
12296+
| overloading.rs:245:13:245:13 | x | | overloading.rs:241:5:242:13 | S |
12297+
| overloading.rs:245:17:245:34 | ...::default(...) | | overloading.rs:241:5:242:13 | S |
12298+
| overloading.rs:246:9:246:21 | ...::from(...) | | overloading.rs:241:5:242:13 | S |
12299+
| overloading.rs:246:20:246:20 | x | | overloading.rs:241:5:242:13 | S |
12300+
| overloading.rs:255:17:255:17 | _ | | overloading.rs:241:5:242:13 | S |
12301+
| overloading.rs:255:31:257:9 | { ... } | | overloading.rs:249:5:249:14 | S1 |
12302+
| overloading.rs:256:13:256:14 | S1 | | overloading.rs:249:5:249:14 | S1 |
12303+
| overloading.rs:262:17:262:17 | _ | | overloading.rs:251:5:251:14 | S2 |
12304+
| overloading.rs:262:32:264:9 | { ... } | | overloading.rs:249:5:249:14 | S1 |
12305+
| overloading.rs:263:13:263:14 | S1 | | overloading.rs:249:5:249:14 | S1 |
12306+
| overloading.rs:269:17:269:17 | _ | | overloading.rs:241:5:242:13 | S |
12307+
| overloading.rs:269:31:271:9 | { ... } | | overloading.rs:251:5:251:14 | S2 |
12308+
| overloading.rs:270:13:270:14 | S2 | | overloading.rs:251:5:251:14 | S2 |
12309+
| overloading.rs:274:10:274:10 | b | | {EXTERNAL LOCATION} | bool |
12310+
| overloading.rs:274:25:278:5 | { ... } | | overloading.rs:249:5:249:14 | S1 |
12311+
| overloading.rs:275:13:275:13 | s | | overloading.rs:241:5:242:13 | S |
12312+
| overloading.rs:275:17:275:54 | if b {...} else {...} | | overloading.rs:241:5:242:13 | S |
12313+
| overloading.rs:275:20:275:20 | b | | {EXTERNAL LOCATION} | bool |
12314+
| overloading.rs:275:22:275:26 | { ... } | | overloading.rs:241:5:242:13 | S |
12315+
| overloading.rs:275:24:275:24 | S | | overloading.rs:241:5:242:13 | S |
12316+
| overloading.rs:275:33:275:54 | { ... } | | overloading.rs:241:5:242:13 | S |
12317+
| overloading.rs:275:35:275:52 | ...::default(...) | | overloading.rs:241:5:242:13 | S |
12318+
| overloading.rs:276:13:276:13 | x | | overloading.rs:249:5:249:14 | S1 |
12319+
| overloading.rs:276:17:276:29 | ...::from(...) | | overloading.rs:249:5:249:14 | S1 |
12320+
| overloading.rs:276:28:276:28 | s | | overloading.rs:241:5:242:13 | S |
12321+
| overloading.rs:277:9:277:9 | x | | overloading.rs:249:5:249:14 | S1 |
1228512322
| pattern_matching.rs:13:26:133:1 | { ... } | | {EXTERNAL LOCATION} | Option |
1228612323
| pattern_matching.rs:13:26:133:1 | { ... } | T | {EXTERNAL LOCATION} | () |
1228712324
| pattern_matching.rs:14:9:14:13 | value | | {EXTERNAL LOCATION} | Option |

0 commit comments

Comments
 (0)