From 7c43bc037894a0356ebce914d05674e3180611f8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matthias=20Kr=C3=BCger?= <matthias.krueger@famsik.de> Date: Sun, 7 Apr 2024 00:48:47 +0200 Subject: [PATCH] add test for ICE: failed to resolve instance for <fn() -> impl ...> #123145 Fixes https://github.com/rust-lang/rust/issues/123145 --- .../failed-to-resolve-instance-ice-123145.rs | 20 +++++++++++++++++++ ...iled-to-resolve-instance-ice-123145.stderr | 15 ++++++++++++++ 2 files changed, 35 insertions(+) create mode 100644 tests/ui/impl-trait/failed-to-resolve-instance-ice-123145.rs create mode 100644 tests/ui/impl-trait/failed-to-resolve-instance-ice-123145.stderr diff --git a/tests/ui/impl-trait/failed-to-resolve-instance-ice-123145.rs b/tests/ui/impl-trait/failed-to-resolve-instance-ice-123145.rs new file mode 100644 index 00000000000..977827f3b55 --- /dev/null +++ b/tests/ui/impl-trait/failed-to-resolve-instance-ice-123145.rs @@ -0,0 +1,20 @@ +// ICE failed to resolve instance for ... +// issue: rust-lang/rust#123145 +//@ build-fail +//~^^^ ERROR overflow evaluating the requirement `(fn() -> impl Handler + +trait Handler { + fn handle(&self) {} +} + +impl<H: Handler, F: Fn() -> H> Handler for F {} + +impl<L: Handler> Handler for (L,) {} + +fn one() -> impl Handler { + (one,) +} + +fn main() { + one.handle(); +} diff --git a/tests/ui/impl-trait/failed-to-resolve-instance-ice-123145.stderr b/tests/ui/impl-trait/failed-to-resolve-instance-ice-123145.stderr new file mode 100644 index 00000000000..f61e8c2f8df --- /dev/null +++ b/tests/ui/impl-trait/failed-to-resolve-instance-ice-123145.stderr @@ -0,0 +1,15 @@ +error[E0275]: overflow evaluating the requirement `(fn() -> impl Handler {one},): Handler` + | +note: required for `fn() -> impl Handler {one}` to implement `Handler` + --> $DIR/failed-to-resolve-instance-ice-123145.rs:10:32 + | +LL | impl<H: Handler, F: Fn() -> H> Handler for F {} + | ------- ^^^^^^^ ^ + | | + | unsatisfied trait bound introduced here + = note: 2 redundant requirements hidden + = note: required for `fn() -> impl Handler {one}` to implement `Handler` + +error: aborting due to 1 previous error + +For more information about this error, try `rustc --explain E0275`.