mirror of https://github.com/rust-lang/rust.git
41 lines
839 B
Rust
41 lines
839 B
Rust
// 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() {}
|