diff options
| author | Matthias Krüger <matthias.krueger@famsik.de> | 2023-05-26 08:24:08 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-05-26 08:24:08 +0200 |
| commit | 39b633ece4d1f874801c13aa482d12f476e7c409 (patch) | |
| tree | a0b4ec9eff8e9431811c097e3340484ad407bfd8 /tests | |
| parent | 2daecf7c455a8ff0d2690b361441558a4212fd85 (diff) | |
| parent | b37cdc67bef4de5dde9f5cffeb8f7a2592fdde4b (diff) | |
| download | rust-39b633ece4d1f874801c13aa482d12f476e7c409.tar.gz rust-39b633ece4d1f874801c13aa482d12f476e7c409.zip | |
Rollup merge of #111947 - obeis:issue-111943, r=compiler-errors
Add test for RPIT defined with different hidden types with different substs Close #111943
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/ui/impl-trait/multiple-defining-usages-in-body.rs | 12 | ||||
| -rw-r--r-- | tests/ui/impl-trait/multiple-defining-usages-in-body.stderr | 26 |
2 files changed, 38 insertions, 0 deletions
diff --git a/tests/ui/impl-trait/multiple-defining-usages-in-body.rs b/tests/ui/impl-trait/multiple-defining-usages-in-body.rs new file mode 100644 index 00000000000..c3a6f09f86d --- /dev/null +++ b/tests/ui/impl-trait/multiple-defining-usages-in-body.rs @@ -0,0 +1,12 @@ +trait Trait {} +impl Trait for () {} + +fn foo<T: Trait, U: Trait>() -> impl Trait { + //~^ WARN function cannot return without recursing [unconditional_recursion] + let a: T = foo::<T, U>(); + //~^ ERROR concrete type differs from previous defining opaque type use + loop {} + let _: T = foo::<U, T>(); +} + +fn main() {} diff --git a/tests/ui/impl-trait/multiple-defining-usages-in-body.stderr b/tests/ui/impl-trait/multiple-defining-usages-in-body.stderr new file mode 100644 index 00000000000..06991749bfa --- /dev/null +++ b/tests/ui/impl-trait/multiple-defining-usages-in-body.stderr @@ -0,0 +1,26 @@ +warning: function cannot return without recursing + --> $DIR/multiple-defining-usages-in-body.rs:4:1 + | +LL | fn foo<T: Trait, U: Trait>() -> impl Trait { + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ cannot return without recursing +LL | +LL | let a: T = foo::<T, U>(); + | ------------- recursive call site + | + = help: a `loop` may express intention better if this is on purpose + = note: `#[warn(unconditional_recursion)]` on by default + +error: concrete type differs from previous defining opaque type use + --> $DIR/multiple-defining-usages-in-body.rs:6:16 + | +LL | let a: T = foo::<T, U>(); + | ^^^^^^^^^^^^^ expected `U`, got `T` + | +note: previous use here + --> $DIR/multiple-defining-usages-in-body.rs:9:16 + | +LL | let _: T = foo::<U, T>(); + | ^^^^^^^^^^^^^ + +error: aborting due to previous error; 1 warning emitted + |
