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

This commit is contained in:
Oli Scherer 2022-02-07 16:04:23 +00:00
parent c93f571c2a
commit 9822fff2ea
2 changed files with 27 additions and 0 deletions

View File

@ -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() {}

View File

@ -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