diff options
| author | Michael Goulet <michael@errs.io> | 2022-07-16 20:08:04 +0000 |
|---|---|---|
| committer | Michael Goulet <michael@errs.io> | 2022-07-19 16:22:33 +0000 |
| commit | e8d9f38141a0ee8ac5484783e1fb5c218f9d2eee (patch) | |
| tree | d00ebdfbc1f535346fb1229c80938a5ab1d65efd /src | |
| parent | 8bd12e8cca3f28f302b9cc0f1f47bb64bd1f98fd (diff) | |
| download | rust-e8d9f38141a0ee8ac5484783e1fb5c218f9d2eee.tar.gz rust-e8d9f38141a0ee8ac5484783e1fb5c218f9d2eee.zip | |
Do not allow typeck children items to constrain outer RPITs
Diffstat (limited to 'src')
| -rw-r--r-- | src/test/ui/impl-trait/issue-99073-2.rs | 17 | ||||
| -rw-r--r-- | src/test/ui/impl-trait/issue-99073-2.stderr | 15 | ||||
| -rw-r--r-- | src/test/ui/impl-trait/issue-99073.rs | 8 | ||||
| -rw-r--r-- | src/test/ui/impl-trait/issue-99073.stderr | 14 |
4 files changed, 54 insertions, 0 deletions
diff --git a/src/test/ui/impl-trait/issue-99073-2.rs b/src/test/ui/impl-trait/issue-99073-2.rs new file mode 100644 index 00000000000..bebd8286de9 --- /dev/null +++ b/src/test/ui/impl-trait/issue-99073-2.rs @@ -0,0 +1,17 @@ +use std::fmt::Display; + +fn main() { + test("hi", true); +} + +fn test<T: Display>(t: T, recurse: bool) -> impl Display { + let f = || { + let i: u32 = test::<i32>(-1, false); + //~^ ERROR mismatched types + println!("{i}"); + }; + if recurse { + f(); + } + t +} diff --git a/src/test/ui/impl-trait/issue-99073-2.stderr b/src/test/ui/impl-trait/issue-99073-2.stderr new file mode 100644 index 00000000000..c1e4b823c08 --- /dev/null +++ b/src/test/ui/impl-trait/issue-99073-2.stderr @@ -0,0 +1,15 @@ +error[E0308]: mismatched types + --> $DIR/issue-99073-2.rs:9:22 + | +LL | fn test<T: Display>(t: T, recurse: bool) -> impl Display { + | ------------ the expected opaque type +LL | let f = || { +LL | let i: u32 = test::<i32>(-1, false); + | ^^^^^^^^^^^^^^^^^^^^^^ types differ + | + = note: expected opaque type `impl std::fmt::Display` + found type `u32` + +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 new file mode 100644 index 00000000000..1d75f608666 --- /dev/null +++ b/src/test/ui/impl-trait/issue-99073.rs @@ -0,0 +1,8 @@ +fn main() { + let _ = fix(|_: &dyn Fn()| {}); +} + +fn fix<F: Fn(G), G: Fn()>(f: F) -> impl Fn() { + move || f(fix(&f)) + //~^ ERROR mismatched types +} diff --git a/src/test/ui/impl-trait/issue-99073.stderr b/src/test/ui/impl-trait/issue-99073.stderr new file mode 100644 index 00000000000..b35d58093d5 --- /dev/null +++ b/src/test/ui/impl-trait/issue-99073.stderr @@ -0,0 +1,14 @@ +error[E0308]: mismatched types + --> $DIR/issue-99073.rs:6:13 + | +LL | fn fix<F: Fn(G), G: Fn()>(f: F) -> impl Fn() { + | --------- the expected opaque type +LL | move || f(fix(&f)) + | ^^^^^^^^^^ types differ + | + = note: expected opaque type `impl Fn()` + found type parameter `G` + +error: aborting due to previous error + +For more information about this error, try `rustc --explain E0308`. |
