Skip to content

Commit

Permalink
Add a test showing that we don't infer across multiple uses of the sa…
Browse files Browse the repository at this point in the history
…me opaque type but with a different order of generic arguments
  • Loading branch information
oli-obk committed Feb 7, 2022
1 parent c93f571 commit 9822fff
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -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() {}
Original file line number Diff line number Diff line change
@@ -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

0 comments on commit 9822fff

Please sign in to comment.