From 4fab3c14b2910225202720eb58737a542d9d2c11 Mon Sep 17 00:00:00 2001 From: Amirhossein Akhlaghpour Date: Sat, 15 Aug 2026 17:57:20 +0330 Subject: [PATCH] Add regression test for assumptions-on-binders ICE Signed-off-by: Amirhossein Akhlaghpour --- ...ng-placeholder-assumptions-issue-159890.rs | 34 +++++++++++++++++++ ...laceholder-assumptions-issue-159890.stderr | 30 ++++++++++++++++ 2 files changed, 64 insertions(+) create mode 100644 tests/ui/assumptions_on_binders/missing-placeholder-assumptions-issue-159890.rs create mode 100644 tests/ui/assumptions_on_binders/missing-placeholder-assumptions-issue-159890.stderr diff --git a/tests/ui/assumptions_on_binders/missing-placeholder-assumptions-issue-159890.rs b/tests/ui/assumptions_on_binders/missing-placeholder-assumptions-issue-159890.rs new file mode 100644 index 0000000000000..e97ab85485ff8 --- /dev/null +++ b/tests/ui/assumptions_on_binders/missing-placeholder-assumptions-issue-159890.rs @@ -0,0 +1,34 @@ +//@ edition: 2024 +//@ compile-flags: -Znext-solver=globally -Zassumptions-on-binders +//@ check-fail + +trait FutureIterator: 'static { + type Future<'s, 'cx>: Future + Send + 'cx; +} + +trait IterCaller: 'static { + type Future2<'cx>: Future + 'cx; + + fn call_2() {} +} + +struct UseIter { + fi_1: FI1, + fi_2: FI2, +} + +impl IterCaller for UseIter +//~^ ERROR not all trait items implemented +where + FI1: FutureIterator + 'static + Send, + for<'s, 'cx> FI1::Future<'s, 'cx>: Send, +{ + fn call_2<'s, 'cx>() -> Self::Future2<'cx> + //~^ ERROR lifetime parameters or bounds on associated function `call_2` do not match + where + 's: 'cx, + { + } +} + +fn main() {} diff --git a/tests/ui/assumptions_on_binders/missing-placeholder-assumptions-issue-159890.stderr b/tests/ui/assumptions_on_binders/missing-placeholder-assumptions-issue-159890.stderr new file mode 100644 index 0000000000000..32cf6d1165147 --- /dev/null +++ b/tests/ui/assumptions_on_binders/missing-placeholder-assumptions-issue-159890.stderr @@ -0,0 +1,30 @@ +error[E0195]: lifetime parameters or bounds on associated function `call_2` do not match the trait declaration + --> $DIR/missing-placeholder-assumptions-issue-159890.rs:26:14 + | +LL | fn call_2() {} + | - lifetimes in impl do not match this associated function in trait +... +LL | fn call_2<'s, 'cx>() -> Self::Future2<'cx> + | ^^^^^^^^^ lifetimes do not match associated function in trait +LL | +LL | / where +LL | | 's: 'cx, + | |________________- this `where` clause might not match the one in the trait + +error[E0046]: not all trait items implemented, missing: `Future2` + --> $DIR/missing-placeholder-assumptions-issue-159890.rs:20:1 + | +LL | type Future2<'cx>: Future + 'cx; + | ------------------------------- `Future2` from trait +... +LL | / impl IterCaller for UseIter +LL | | +LL | | where +LL | | FI1: FutureIterator + 'static + Send, +LL | | for<'s, 'cx> FI1::Future<'s, 'cx>: Send, + | |____________________________________________^ missing `Future2` in implementation + +error: aborting due to 2 previous errors + +Some errors have detailed explanations: E0046, E0195. +For more information about an error, try `rustc --explain E0046`.