diff options
| author | Rémy Rakic <remy.rakic+github@gmail.com> | 2025-01-15 08:06:03 +0000 |
|---|---|---|
| committer | Rémy Rakic <remy.rakic+github@gmail.com> | 2025-01-15 08:26:23 +0000 |
| commit | 67a07e01cf8db40d30cea7489d78413bb3b79b00 (patch) | |
| tree | 9660dbbe5a51b6188462f20326bc983abc98b750 | |
| parent | 93ba568ab98f1492a96945ef646eeb898128b2ef (diff) | |
| download | rust-67a07e01cf8db40d30cea7489d78413bb3b79b00.tar.gz rust-67a07e01cf8db40d30cea7489d78413bb3b79b00.zip | |
add test for issue 135514
| -rw-r--r-- | tests/incremental/overlapping-impls-in-new-solver-issue-135514.rs | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/tests/incremental/overlapping-impls-in-new-solver-issue-135514.rs b/tests/incremental/overlapping-impls-in-new-solver-issue-135514.rs new file mode 100644 index 00000000000..8fcc913fa37 --- /dev/null +++ b/tests/incremental/overlapping-impls-in-new-solver-issue-135514.rs @@ -0,0 +1,40 @@ +// Regression test for #135514 where the new solver didn't properly record deps for incremental +// compilation, similarly to `track-deps-in-new-solver.rs`. +// +// In this specially crafted example, @steffahn was able to trigger unsoundness with an overlapping +// impl that was accepted during the incremental rebuild. + +//@ revisions: cpass1 cfail2 +//@ compile-flags: -Znext-solver + +pub trait Trait {} + +pub struct S0<T>(T); + +pub struct S<T>(T); +impl<T> Trait for S<T> where S0<T>: Trait {} + +pub struct W; + +pub trait Other { + type Choose<L, R>; +} + +// first impl +impl<T: Trait> Other for T { + type Choose<L, R> = L; +} + +// second impl +impl<T> Other for S<T> { + //[cfail2]~^ ERROR conflicting implementations of trait + type Choose<L, R> = R; +} + +#[cfg(cpass1)] +impl Trait for W {} + +#[cfg(cfail2)] +impl Trait for S<W> {} + +fn main() {} |
