From 50b31926eb6103dbefdee718eb2112b08dbecc62 Mon Sep 17 00:00:00 2001 From: Takayuki Maeda Date: Mon, 2 Feb 2026 02:07:19 +0900 Subject: [PATCH 1/3] fix next-solver ICE on PointeeSized goals --- .../traits/fulfillment_errors.rs | 2 + .../pointee-sized-next-solver-ice.rs | 20 ++++ .../pointee-sized-next-solver-ice.stderr | 92 +++++++++++++++++++ 3 files changed, 114 insertions(+) create mode 100644 tests/ui/cycle-trait/pointee-sized-next-solver-ice.rs create mode 100644 tests/ui/cycle-trait/pointee-sized-next-solver-ice.stderr diff --git a/compiler/rustc_trait_selection/src/error_reporting/traits/fulfillment_errors.rs b/compiler/rustc_trait_selection/src/error_reporting/traits/fulfillment_errors.rs index 6872d038fb7f0..a87aaa1ef2a4f 100644 --- a/compiler/rustc_trait_selection/src/error_reporting/traits/fulfillment_errors.rs +++ b/compiler/rustc_trait_selection/src/error_reporting/traits/fulfillment_errors.rs @@ -2596,6 +2596,8 @@ impl<'a, 'tcx> TypeErrCtxt<'a, 'tcx> { trait_def_id != *def_id && trait_name == self.tcx.item_name(def_id) && trait_has_same_params(*def_id) + // `PointeeSized` is removed during lowering. + && !self.tcx.is_lang_item(*def_id, LangItem::PointeeSized) && self.predicate_must_hold_modulo_regions(&Obligation::new( self.tcx, obligation.cause.clone(), diff --git a/tests/ui/cycle-trait/pointee-sized-next-solver-ice.rs b/tests/ui/cycle-trait/pointee-sized-next-solver-ice.rs new file mode 100644 index 0000000000000..3c8e0a797c52c --- /dev/null +++ b/tests/ui/cycle-trait/pointee-sized-next-solver-ice.rs @@ -0,0 +1,20 @@ +//@ compile-flags: -Znext-solver=globally + +// Regression test for #151957 + +trait PointeeSized { + type Undefined; +} + +struct T; + +impl PointeeSized for T +//~^ ERROR not all trait items implemented, missing: `Undefined` +//~| ERROR the trait bound `T: PointeeSized` is not satisfied +where + ::Undefined: PointeeSized, +//~^ ERROR the trait bound `T: PointeeSized` is not satisfied +//~| ERROR the trait bound `T: PointeeSized` is not satisfied +{} + +fn main() {} diff --git a/tests/ui/cycle-trait/pointee-sized-next-solver-ice.stderr b/tests/ui/cycle-trait/pointee-sized-next-solver-ice.stderr new file mode 100644 index 0000000000000..fd18f71606b11 --- /dev/null +++ b/tests/ui/cycle-trait/pointee-sized-next-solver-ice.stderr @@ -0,0 +1,92 @@ +error[E0046]: not all trait items implemented, missing: `Undefined` + --> $DIR/pointee-sized-next-solver-ice.rs:11:1 + | +LL | type Undefined; + | -------------- `Undefined` from trait +... +LL | / impl PointeeSized for T +LL | | +LL | | +LL | | where +LL | | ::Undefined: PointeeSized, + | |_________________________________________________^ missing `Undefined` in implementation + +error[E0277]: the trait bound `T: PointeeSized` is not satisfied + --> $DIR/pointee-sized-next-solver-ice.rs:15:5 + | +LL | ::Undefined: PointeeSized, + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ unsatisfied trait bound + | +help: the trait `PointeeSized` is not implemented for `T` + --> $DIR/pointee-sized-next-solver-ice.rs:9:1 + | +LL | struct T; + | ^^^^^^^^ +help: the trait `PointeeSized` is implemented for `T` + --> $DIR/pointee-sized-next-solver-ice.rs:11:1 + | +LL | / impl PointeeSized for T +LL | | +LL | | +LL | | where +LL | | ::Undefined: PointeeSized, + | |_________________________________________________^ + = help: see issue #48214 +help: add `#![feature(trivial_bounds)]` to the crate attributes to enable + | +LL + #![feature(trivial_bounds)] + | + +error[E0277]: the trait bound `T: PointeeSized` is not satisfied + --> $DIR/pointee-sized-next-solver-ice.rs:11:23 + | +LL | impl PointeeSized for T + | ^ unsatisfied trait bound + | +help: the trait `PointeeSized` is not implemented for `T` + --> $DIR/pointee-sized-next-solver-ice.rs:9:1 + | +LL | struct T; + | ^^^^^^^^ +help: the trait `PointeeSized` is implemented for `T` + --> $DIR/pointee-sized-next-solver-ice.rs:11:1 + | +LL | / impl PointeeSized for T +LL | | +LL | | +LL | | where +LL | | ::Undefined: PointeeSized, + | |_________________________________________________^ + +error[E0277]: the trait bound `T: PointeeSized` is not satisfied + --> $DIR/pointee-sized-next-solver-ice.rs:15:37 + | +LL | ::Undefined: PointeeSized, + | ^^^^^^^^^^^^ unsatisfied trait bound + | +help: the trait `PointeeSized` is not implemented for `T` + --> $DIR/pointee-sized-next-solver-ice.rs:9:1 + | +LL | struct T; + | ^^^^^^^^ +help: the trait `PointeeSized` is implemented for `T` + --> $DIR/pointee-sized-next-solver-ice.rs:11:1 + | +LL | / impl PointeeSized for T +LL | | +LL | | +LL | | where +LL | | ::Undefined: PointeeSized, + | |_________________________________________________^ +note: required by a bound in `PointeeSized` + --> $DIR/pointee-sized-next-solver-ice.rs:5:1 + | +LL | / trait PointeeSized { +LL | | type Undefined; +LL | | } + | |_^ required by this bound in `PointeeSized` + +error: aborting due to 4 previous errors + +Some errors have detailed explanations: E0046, E0277. +For more information about an error, try `rustc --explain E0046`. From b5d03214f98fc704c855a0240f65563d471575d0 Mon Sep 17 00:00:00 2001 From: Takayuki Maeda Date: Mon, 2 Feb 2026 02:23:19 +0900 Subject: [PATCH 2/3] add a comment --- .../src/error_reporting/traits/fulfillment_errors.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/compiler/rustc_trait_selection/src/error_reporting/traits/fulfillment_errors.rs b/compiler/rustc_trait_selection/src/error_reporting/traits/fulfillment_errors.rs index a87aaa1ef2a4f..c05b176d0e68d 100644 --- a/compiler/rustc_trait_selection/src/error_reporting/traits/fulfillment_errors.rs +++ b/compiler/rustc_trait_selection/src/error_reporting/traits/fulfillment_errors.rs @@ -2596,7 +2596,7 @@ impl<'a, 'tcx> TypeErrCtxt<'a, 'tcx> { trait_def_id != *def_id && trait_name == self.tcx.item_name(def_id) && trait_has_same_params(*def_id) - // `PointeeSized` is removed during lowering. + // Skip `PointeeSized` here to avoid creating `PointeeSized` solver obligations during error reporting. && !self.tcx.is_lang_item(*def_id, LangItem::PointeeSized) && self.predicate_must_hold_modulo_regions(&Obligation::new( self.tcx, From 5bd2b8539c0b123635980d0c5518bc08b98c40f5 Mon Sep 17 00:00:00 2001 From: Takayuki Maeda Date: Mon, 2 Feb 2026 03:21:51 +0900 Subject: [PATCH 3/3] replace issue number with link --- tests/ui/cycle-trait/pointee-sized-next-solver-ice.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/ui/cycle-trait/pointee-sized-next-solver-ice.rs b/tests/ui/cycle-trait/pointee-sized-next-solver-ice.rs index 3c8e0a797c52c..b69382ebeccda 100644 --- a/tests/ui/cycle-trait/pointee-sized-next-solver-ice.rs +++ b/tests/ui/cycle-trait/pointee-sized-next-solver-ice.rs @@ -1,6 +1,6 @@ //@ compile-flags: -Znext-solver=globally -// Regression test for #151957 +// Regression test for https://github.com/rust-lang/rust/issues/151957 trait PointeeSized { type Undefined;