diff options
| author | Obei Sideg <obei.sideg@gmail.com> | 2023-05-25 15:43:41 +0300 |
|---|---|---|
| committer | Obei Sideg <obei.sideg@gmail.com> | 2023-05-26 00:14:12 +0300 |
| commit | b37cdc67bef4de5dde9f5cffeb8f7a2592fdde4b (patch) | |
| tree | 93a4171ae93f6255d8fbc251bd52dbd826d631df | |
| parent | eb9da7bfa375ad58bcb946115f3191a2756785e5 (diff) | |
| download | rust-b37cdc67bef4de5dde9f5cffeb8f7a2592fdde4b.tar.gz rust-b37cdc67bef4de5dde9f5cffeb8f7a2592fdde4b.zip | |
Add test for RPIT defined with different hidden types with different substs
| -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 + |
