From 5e8f1e80d8bff9995bbc34a959b8aa75e2a5cc00 Mon Sep 17 00:00:00 2001 From: Michael Goulet Date: Sat, 9 Jul 2022 07:11:03 +0000 Subject: Check that RPITs constrained by a recursive call in a closure are compatible --- src/test/ui/impl-trait/issue-99073-2.rs | 2 +- src/test/ui/impl-trait/issue-99073-2.stderr | 15 +++++++-------- src/test/ui/impl-trait/issue-99073.rs | 6 +++--- src/test/ui/impl-trait/issue-99073.stderr | 18 +++++++++--------- 4 files changed, 20 insertions(+), 21 deletions(-) (limited to 'src/test') diff --git a/src/test/ui/impl-trait/issue-99073-2.rs b/src/test/ui/impl-trait/issue-99073-2.rs index bebd8286de9..14ac688806b 100644 --- a/src/test/ui/impl-trait/issue-99073-2.rs +++ b/src/test/ui/impl-trait/issue-99073-2.rs @@ -7,7 +7,7 @@ fn main() { fn test(t: T, recurse: bool) -> impl Display { let f = || { let i: u32 = test::(-1, false); - //~^ ERROR mismatched types + //~^ ERROR concrete type differs from previous defining opaque type use println!("{i}"); }; if recurse { diff --git a/src/test/ui/impl-trait/issue-99073-2.stderr b/src/test/ui/impl-trait/issue-99073-2.stderr index c1e4b823c08..913bc8f5674 100644 --- a/src/test/ui/impl-trait/issue-99073-2.stderr +++ b/src/test/ui/impl-trait/issue-99073-2.stderr @@ -1,15 +1,14 @@ -error[E0308]: mismatched types +error: concrete type differs from previous defining opaque type use --> $DIR/issue-99073-2.rs:9:22 | -LL | fn test(t: T, recurse: bool) -> impl Display { - | ------------ the expected opaque type -LL | let f = || { LL | let i: u32 = test::(-1, false); - | ^^^^^^^^^^^^^^^^^^^^^^ types differ + | ^^^^^^^^^^^^^^^^^^^^^^ expected `T`, got `u32` | - = note: expected opaque type `impl std::fmt::Display` - found type `u32` +note: previous use here + --> $DIR/issue-99073-2.rs:16:5 + | +LL | t + | ^ error: aborting due to previous error -For more information about this error, try `rustc --explain E0308`. diff --git a/src/test/ui/impl-trait/issue-99073.rs b/src/test/ui/impl-trait/issue-99073.rs index 1d75f608666..7798e247df0 100644 --- a/src/test/ui/impl-trait/issue-99073.rs +++ b/src/test/ui/impl-trait/issue-99073.rs @@ -1,8 +1,8 @@ fn main() { - let _ = fix(|_: &dyn Fn()| {}); + let _ = fix(|_: &dyn Fn()| {}); } fn fix(f: F) -> impl Fn() { - move || f(fix(&f)) - //~^ ERROR mismatched types + move || f(fix(&f)) + //~^ ERROR concrete type differs from previous defining opaque type use } diff --git a/src/test/ui/impl-trait/issue-99073.stderr b/src/test/ui/impl-trait/issue-99073.stderr index b35d58093d5..54636795349 100644 --- a/src/test/ui/impl-trait/issue-99073.stderr +++ b/src/test/ui/impl-trait/issue-99073.stderr @@ -1,14 +1,14 @@ -error[E0308]: mismatched types - --> $DIR/issue-99073.rs:6:13 +error: concrete type differs from previous defining opaque type use + --> $DIR/issue-99073.rs:6:11 | -LL | fn fix(f: F) -> impl Fn() { - | --------- the expected opaque type -LL | move || f(fix(&f)) - | ^^^^^^^^^^ types differ +LL | move || f(fix(&f)) + | ^^^^^^^^^^ expected `[closure@$DIR/issue-99073.rs:6:3: 6:10]`, got `G` | - = note: expected opaque type `impl Fn()` - found type parameter `G` +note: previous use here + --> $DIR/issue-99073.rs:6:3 + | +LL | move || f(fix(&f)) + | ^^^^^^^^^^^^^^^^^^ error: aborting due to previous error -For more information about this error, try `rustc --explain E0308`. -- cgit 1.4.1-3-g733a5