From 67a07e01cf8db40d30cea7489d78413bb3b79b00 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20Rakic?= Date: Wed, 15 Jan 2025 08:06:03 +0000 Subject: [PATCH] add test for issue 135514 --- ...apping-impls-in-new-solver-issue-135514.rs | 40 +++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 tests/incremental/overlapping-impls-in-new-solver-issue-135514.rs 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 0000000000000..8fcc913fa3719 --- /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); + +pub struct S(T); +impl Trait for S where S0: Trait {} + +pub struct W; + +pub trait Other { + type Choose; +} + +// first impl +impl Other for T { + type Choose = L; +} + +// second impl +impl Other for S { + //[cfail2]~^ ERROR conflicting implementations of trait + type Choose = R; +} + +#[cfg(cpass1)] +impl Trait for W {} + +#[cfg(cfail2)] +impl Trait for S {} + +fn main() {}