Skip to content

Commit 3c663d8

Browse files
authored
Merge pull request #20715 from hvitved/rust/type-inference-overlap-test
Rust: Add type inference tests for method resolution overlap
2 parents e5f1238 + 6ed8bcb commit 3c663d8

File tree

3 files changed

+4119
-4048
lines changed

3 files changed

+4119
-4048
lines changed

‎rust/ql/test/library-tests/type-inference/CONSISTENCY/PathResolutionConsistency.expected‎

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,13 @@ multipleCallTargets
55
| dereference.rs:184:17:184:30 | ... .foo() |
66
| dereference.rs:186:17:186:25 | S.bar(...) |
77
| dereference.rs:187:17:187:29 | S.bar(...) |
8-
| main.rs:2481:13:2481:31 | ...::from(...) |
9-
| main.rs:2482:13:2482:31 | ...::from(...) |
10-
| main.rs:2483:13:2483:31 | ...::from(...) |
11-
| main.rs:2489:13:2489:31 | ...::from(...) |
12-
| main.rs:2490:13:2490:31 | ...::from(...) |
13-
| main.rs:2491:13:2491:31 | ...::from(...) |
8+
| main.rs:589:9:589:14 | S4.m() |
9+
| main.rs:590:9:590:18 | ...::m(...) |
10+
| main.rs:591:9:591:20 | ... .m() |
11+
| main.rs:592:9:592:24 | ...::m(...) |
12+
| main.rs:2519:13:2519:31 | ...::from(...) |
13+
| main.rs:2520:13:2520:31 | ...::from(...) |
14+
| main.rs:2521:13:2521:31 | ...::from(...) |
15+
| main.rs:2527:13:2527:31 | ...::from(...) |
16+
| main.rs:2528:13:2528:31 | ...::from(...) |
17+
| main.rs:2529:13:2529:31 | ...::from(...) |

‎rust/ql/test/library-tests/type-inference/main.rs‎

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -535,6 +535,37 @@ mod impl_overlap {
535535
}
536536
}
537537

538+
trait MyTrait1 {
539+
// MyTrait1::m
540+
fn m(&self) {}
541+
}
542+
543+
trait MyTrait2: MyTrait1 {}
544+
545+
#[derive(Debug)]
546+
struct S4;
547+
548+
impl MyTrait1 for S4 {
549+
// <S4_as_MyTrait1>::m
550+
fn m(&self) {}
551+
}
552+
553+
impl MyTrait2 for S4 {}
554+
555+
#[derive(Debug)]
556+
struct S5<T5>(T5);
557+
558+
impl MyTrait1 for S5<i32> {
559+
// <S5<i32>_as_MyTrait1>::m
560+
fn m(&self) {}
561+
}
562+
563+
impl MyTrait2 for S5<i32> {}
564+
565+
impl MyTrait1 for S5<bool> {}
566+
567+
impl MyTrait2 for S5<bool> {}
568+
538569
pub fn f() {
539570
let x = S1;
540571
println!("{:?}", x.common_method()); // $ target=S1::common_method
@@ -554,6 +585,13 @@ mod impl_overlap {
554585
let w = S3(S1);
555586
println!("{:?}", w.m(x)); // $ target=S3<T>::m
556587
println!("{:?}", S3::m(&w, x)); // $ target=S3<T>::m
588+
589+
S4.m(); // $ target=<S4_as_MyTrait1>::m $ SPURIOUS: target=MyTrait1::m
590+
S4::m(&S4); // $ target=<S4_as_MyTrait1>::m $ SPURIOUS: target=MyTrait1::m
591+
S5(0i32).m(); // $ target=<S5<i32>_as_MyTrait1>::m $ SPURIOUS: target=MyTrait1::m
592+
S5::m(&S5(0i32)); // $ target=<S5<i32>_as_MyTrait1>::m $ SPURIOUS: target=MyTrait1::m
593+
S5(true).m(); // $ target=MyTrait1::m
594+
S5::m(&S5(true)); // $ target=MyTrait1::m
557595
}
558596
}
559597

0 commit comments

Comments
 (0)