From 4922210ea6ff5fa7143330729ff322b829bc3fa8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20Rakic?= Date: Wed, 6 May 2026 19:04:58 +0200 Subject: [PATCH] add normalization test with field with diverging alias Another example from https://github.com/rust-lang/trait-system-refactor-initiative/issues/139 and which was likely fixed by https://github.com/rust-lang/rust/pull/140672 as well. --- ...e-diverging-alias-in-struct.current.stderr | 9 +++++++ ...lize-diverging-alias-in-struct.next.stderr | 18 +++++++++++++ .../normalize-diverging-alias-in-struct.rs | 27 +++++++++++++++++++ 3 files changed, 54 insertions(+) create mode 100644 tests/ui/traits/normalize/normalize-diverging-alias-in-struct.current.stderr create mode 100644 tests/ui/traits/normalize/normalize-diverging-alias-in-struct.next.stderr create mode 100644 tests/ui/traits/normalize/normalize-diverging-alias-in-struct.rs diff --git a/tests/ui/traits/normalize/normalize-diverging-alias-in-struct.current.stderr b/tests/ui/traits/normalize/normalize-diverging-alias-in-struct.current.stderr new file mode 100644 index 000000000000..7787d6b68f25 --- /dev/null +++ b/tests/ui/traits/normalize/normalize-diverging-alias-in-struct.current.stderr @@ -0,0 +1,9 @@ +error[E0275]: overflow evaluating the requirement `::Diverges == _` + --> $DIR/normalize-diverging-alias-in-struct.rs:21:12 + | +LL | field: Box<::Diverges>, + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +error: aborting due to 1 previous error + +For more information about this error, try `rustc --explain E0275`. diff --git a/tests/ui/traits/normalize/normalize-diverging-alias-in-struct.next.stderr b/tests/ui/traits/normalize/normalize-diverging-alias-in-struct.next.stderr new file mode 100644 index 000000000000..d7046d2b058b --- /dev/null +++ b/tests/ui/traits/normalize/normalize-diverging-alias-in-struct.next.stderr @@ -0,0 +1,18 @@ +error[E0271]: type mismatch resolving `::Diverges normalizes-to _` + --> $DIR/normalize-diverging-alias-in-struct.rs:21:12 + | +LL | field: Box<::Diverges>, + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ types differ + +error[E0271]: type mismatch resolving `::Diverges normalizes-to _` + --> $DIR/normalize-diverging-alias-in-struct.rs:21:12 + | +LL | field: Box<::Diverges>, + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ types differ + | +note: required by a bound in `Box` + --> $SRC_DIR/alloc/src/boxed.rs:LL:COL + +error: aborting due to 2 previous errors + +For more information about this error, try `rustc --explain E0271`. diff --git a/tests/ui/traits/normalize/normalize-diverging-alias-in-struct.rs b/tests/ui/traits/normalize/normalize-diverging-alias-in-struct.rs new file mode 100644 index 000000000000..45b2cb56c25f --- /dev/null +++ b/tests/ui/traits/normalize/normalize-diverging-alias-in-struct.rs @@ -0,0 +1,27 @@ +// Ensure that structs with fields whose types contain diverging aliases are properly caught with +// both solvers. +// MCVE from https://github.com/rust-lang/trait-system-refactor-initiative/issues/139#issuecomment-2703127026. + +//@ revisions: current next +//@ ignore-compare-mode-next-solver (explicit revisions) +//@ [next] compile-flags: -Znext-solver + +#![feature(rustc_attrs)] +#![rustc_no_implicit_bounds] + +trait Trait { + type Diverges; +} + +impl Trait for T { + type Diverges = D::Diverges; +} + +struct Foo { + field: Box<::Diverges>, + //[current]~^ ERROR: overflow evaluating the requirement `::Diverges == _` + //[next]~^^ ERROR: type mismatch resolving `::Diverges normalizes-to _` + //[next]~| ERROR: type mismatch resolving `::Diverges normalizes-to _` +} + +fn main() {}