From 44a7eb01fcedd4c42ea9b8cb76be71aa72bf8a4a Mon Sep 17 00:00:00 2001 From: inq Date: Mon, 4 May 2026 03:27:18 +0700 Subject: [PATCH 1/2] Regression test for trait-system-refactor#7 --- .../alias-relate/transitive-inference.rs | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 tests/ui/traits/next-solver/alias-relate/transitive-inference.rs diff --git a/tests/ui/traits/next-solver/alias-relate/transitive-inference.rs b/tests/ui/traits/next-solver/alias-relate/transitive-inference.rs new file mode 100644 index 0000000000000..e41ea736e950d --- /dev/null +++ b/tests/ui/traits/next-solver/alias-relate/transitive-inference.rs @@ -0,0 +1,38 @@ +//@ revisions: old next +//@[next] compile-flags: -Znext-solver=globally +//@ ignore-compare-mode-next-solver (explicit revisions) +//@ check-pass +// Regression test for trait-system-refactor-initiative#7 + +use std::marker::PhantomData; + +#[derive(Default)] +struct Foo(PhantomData<(T, U)>); + +trait Trait { + type Assoc; + + fn to_assoc(self) -> Self::Assoc; +} + +impl Trait for Foo { + type Assoc = Foo; + fn to_assoc(self) -> Self::Assoc { + Foo(PhantomData) + } +} +impl Trait for Foo { + type Assoc = Foo; + fn to_assoc(self) -> Self::Assoc { + Foo(PhantomData) + } +} + +#[allow(unused_assignments)] +fn main() { + let mut x: Foo<_, _> = Default::default(); + let mut assoc = x.to_assoc(); + assoc = Foo::(PhantomData); + assoc = Foo::<_, i32>(PhantomData); + x = assoc; +} From d4c413e34873e0f0c384a9fd7274d09228d10319 Mon Sep 17 00:00:00 2001 From: inkyu Date: Mon, 4 May 2026 15:05:04 +0700 Subject: [PATCH 2/2] Apply suggestion from @lcnr Co-authored-by: lcnr --- .../traits/next-solver/alias-relate/transitive-inference.rs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/tests/ui/traits/next-solver/alias-relate/transitive-inference.rs b/tests/ui/traits/next-solver/alias-relate/transitive-inference.rs index e41ea736e950d..207cf71c0b3a4 100644 --- a/tests/ui/traits/next-solver/alias-relate/transitive-inference.rs +++ b/tests/ui/traits/next-solver/alias-relate/transitive-inference.rs @@ -2,7 +2,11 @@ //@[next] compile-flags: -Znext-solver=globally //@ ignore-compare-mode-next-solver (explicit revisions) //@ check-pass -// Regression test for trait-system-refactor-initiative#7 +// Regression test for trait-system-refactor-initiative#7. This test +// would error if we were to rely on lazy normalization here. +// +// We eagerly normalize the associated types, here, causing this to +// compile. use std::marker::PhantomData;