mirror of
https://github.com/github/codeql.git
synced 2025-12-16 16:53:25 +01:00
Rust: Add type inference tests for method resolution overlap
This commit is contained in:
@@ -5,9 +5,13 @@ multipleCallTargets
|
||||
| dereference.rs:184:17:184:30 | ... .foo() |
|
||||
| dereference.rs:186:17:186:25 | S.bar(...) |
|
||||
| dereference.rs:187:17:187:29 | S.bar(...) |
|
||||
| main.rs:2481:13:2481:31 | ...::from(...) |
|
||||
| main.rs:2482:13:2482:31 | ...::from(...) |
|
||||
| main.rs:2483:13:2483:31 | ...::from(...) |
|
||||
| main.rs:2489:13:2489:31 | ...::from(...) |
|
||||
| main.rs:2490:13:2490:31 | ...::from(...) |
|
||||
| main.rs:2491:13:2491:31 | ...::from(...) |
|
||||
| main.rs:589:9:589:14 | S4.m() |
|
||||
| main.rs:590:9:590:18 | ...::m(...) |
|
||||
| main.rs:591:9:591:20 | ... .m() |
|
||||
| main.rs:592:9:592:24 | ...::m(...) |
|
||||
| main.rs:2519:13:2519:31 | ...::from(...) |
|
||||
| main.rs:2520:13:2520:31 | ...::from(...) |
|
||||
| main.rs:2521:13:2521:31 | ...::from(...) |
|
||||
| main.rs:2527:13:2527:31 | ...::from(...) |
|
||||
| main.rs:2528:13:2528:31 | ...::from(...) |
|
||||
| main.rs:2529:13:2529:31 | ...::from(...) |
|
||||
|
||||
@@ -535,6 +535,37 @@ mod impl_overlap {
|
||||
}
|
||||
}
|
||||
|
||||
trait MyTrait1 {
|
||||
// MyTrait1::m
|
||||
fn m(&self) {}
|
||||
}
|
||||
|
||||
trait MyTrait2: MyTrait1 {}
|
||||
|
||||
#[derive(Debug)]
|
||||
struct S4;
|
||||
|
||||
impl MyTrait1 for S4 {
|
||||
// <S4_as_MyTrait1>::m
|
||||
fn m(&self) {}
|
||||
}
|
||||
|
||||
impl MyTrait2 for S4 {}
|
||||
|
||||
#[derive(Debug)]
|
||||
struct S5<T5>(T5);
|
||||
|
||||
impl MyTrait1 for S5<i32> {
|
||||
// <S5<i32>_as_MyTrait1>::m
|
||||
fn m(&self) {}
|
||||
}
|
||||
|
||||
impl MyTrait2 for S5<i32> {}
|
||||
|
||||
impl MyTrait1 for S5<bool> {}
|
||||
|
||||
impl MyTrait2 for S5<bool> {}
|
||||
|
||||
pub fn f() {
|
||||
let x = S1;
|
||||
println!("{:?}", x.common_method()); // $ target=S1::common_method
|
||||
@@ -554,6 +585,13 @@ mod impl_overlap {
|
||||
let w = S3(S1);
|
||||
println!("{:?}", w.m(x)); // $ target=S3<T>::m
|
||||
println!("{:?}", S3::m(&w, x)); // $ target=S3<T>::m
|
||||
|
||||
S4.m(); // $ target=<S4_as_MyTrait1>::m $ SPURIOUS: target=MyTrait1::m
|
||||
S4::m(&S4); // $ target=<S4_as_MyTrait1>::m $ SPURIOUS: target=MyTrait1::m
|
||||
S5(0i32).m(); // $ target=<S5<i32>_as_MyTrait1>::m $ SPURIOUS: target=MyTrait1::m
|
||||
S5::m(&S5(0i32)); // $ target=<S5<i32>_as_MyTrait1>::m $ SPURIOUS: target=MyTrait1::m
|
||||
S5(true).m(); // $ target=MyTrait1::m
|
||||
S5::m(&S5(true)); // $ target=MyTrait1::m
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user