2023-12-18 08:31:00 +01:00
|
|
|
//@ compile-flags: -Znext-solver=coherence
|
|
|
|
|
//@ check-pass
|
2025-06-27 05:34:08 +00:00
|
|
|
#![feature(rustc_attrs)]
|
|
|
|
|
#![rustc_no_implicit_bounds]
|
2023-12-18 08:31:00 +01:00
|
|
|
|
|
|
|
|
// A regression test for trait-system-refactor-initiative#70.
|
|
|
|
|
|
|
|
|
|
trait Trait {
|
|
|
|
|
type Assoc;
|
|
|
|
|
}
|
|
|
|
|
|
2025-06-27 05:34:08 +00:00
|
|
|
struct W<T>(*mut T);
|
|
|
|
|
impl<T> Trait for W<W<T>>
|
2023-12-18 08:31:00 +01:00
|
|
|
where
|
|
|
|
|
W<T>: Trait,
|
|
|
|
|
{
|
|
|
|
|
type Assoc = ();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
trait NoOverlap {}
|
|
|
|
|
impl<T: Trait<Assoc = u32>> NoOverlap for T {}
|
|
|
|
|
// `Projection(<W<_> as Trait>::Assoc, u32)` should result in error even
|
|
|
|
|
// though applying the impl results in overflow. This is necessary to match
|
|
|
|
|
// the behavior of the old solver.
|
2025-06-27 05:34:08 +00:00
|
|
|
impl<T> NoOverlap for W<T> {}
|
2023-12-18 08:31:00 +01:00
|
|
|
|
|
|
|
|
fn main() {}
|