diff options
| author | Oli Scherer <git-spam-no-reply9815368754983@oli-obk.de> | 2022-02-07 16:04:23 +0000 |
|---|---|---|
| committer | Oli Scherer <git-spam-no-reply9815368754983@oli-obk.de> | 2022-02-07 16:04:23 +0000 |
| commit | 9822fff2ea892fed6da7d219c945c0b30de3c7a3 (patch) | |
| tree | eeac9ccd228eca6e6a65ff4a0f07fb255555c15a | |
| parent | c93f571c2a040a29525b077e557b3d592072fcf2 (diff) | |
| download | rust-9822fff2ea892fed6da7d219c945c0b30de3c7a3.tar.gz rust-9822fff2ea892fed6da7d219c945c0b30de3c7a3.zip | |
Add a test showing that we don't infer across multiple uses of the same opaque type but with a different order of generic arguments
| -rw-r--r-- | src/test/ui/type-alias-impl-trait/multiple-def-uses-in-one-fn-infer.rs | 13 | ||||
| -rw-r--r-- | src/test/ui/type-alias-impl-trait/multiple-def-uses-in-one-fn-infer.stderr | 14 |
2 files changed, 27 insertions, 0 deletions
diff --git a/src/test/ui/type-alias-impl-trait/multiple-def-uses-in-one-fn-infer.rs b/src/test/ui/type-alias-impl-trait/multiple-def-uses-in-one-fn-infer.rs new file mode 100644 index 00000000000..08cb48ccf30 --- /dev/null +++ b/src/test/ui/type-alias-impl-trait/multiple-def-uses-in-one-fn-infer.rs @@ -0,0 +1,13 @@ +// https://github.com/rust-lang/rust/issues/73481 +// This test used to cause unsoundness, since one of the two possible +// resolutions was chosen at random instead of erroring due to conflicts. + +#![feature(type_alias_impl_trait)] + +type Y<A, B> = impl std::fmt::Debug; + +fn g<A, B>() -> (Y<A, B>, Y<B, A>) { + (42_i64, 60) //~^ ERROR concrete type differs from previous defining opaque type use +} + +fn main() {} diff --git a/src/test/ui/type-alias-impl-trait/multiple-def-uses-in-one-fn-infer.stderr b/src/test/ui/type-alias-impl-trait/multiple-def-uses-in-one-fn-infer.stderr new file mode 100644 index 00000000000..3f57612684e --- /dev/null +++ b/src/test/ui/type-alias-impl-trait/multiple-def-uses-in-one-fn-infer.stderr @@ -0,0 +1,14 @@ +error: concrete type differs from previous defining opaque type use + --> $DIR/multiple-def-uses-in-one-fn-infer.rs:9:1 + | +LL | fn g<A, B>() -> (Y<A, B>, Y<B, A>) { + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected `i64`, got `i32` + | +note: previous use here + --> $DIR/multiple-def-uses-in-one-fn-infer.rs:9:1 + | +LL | fn g<A, B>() -> (Y<A, B>, Y<B, A>) { + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +error: aborting due to previous error + |
