Rust: Add type inference tests for method resolution overlap

This commit is contained in:
Tom Hvitved
2025-10-27 14:03:31 +01:00
parent e5f1238e26
commit 6ed8bcbcf3
3 changed files with 4119 additions and 4048 deletions

View File

@@ -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(...) |

View File

@@ -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
}
}