Skip to content

Commit

Permalink
Rollup merge of rust-lang#68498 - Aaron1011:tait-regression-tests, r=…
Browse files Browse the repository at this point in the history
…Centril

Add some type-alias-impl-trait regression tests

Fixes rust-lang#57611
Fixes rust-lang#57807
  • Loading branch information
Dylan-DPC committed Jan 25, 2020
2 parents 5b95040 + 1605276 commit c662f45
Show file tree
Hide file tree
Showing 3 changed files with 81 additions and 0 deletions.
27 changes: 27 additions & 0 deletions src/test/ui/type-alias-impl-trait/issue-57611-trait-alias.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
// Regression test for issue #57611
// Ensures that we don't ICE
// FIXME: This should compile, but it currently doesn't

#![feature(trait_alias)]
#![feature(type_alias_impl_trait)]

trait Foo {
type Bar: Baz<Self, Self>;

fn bar(&self) -> Self::Bar;
}

struct X;

impl Foo for X {
type Bar = impl Baz<Self, Self>; //~ ERROR type mismatch in closure arguments
//~^ ERROR type mismatch resolving

fn bar(&self) -> Self::Bar {
|x| x
}
}

trait Baz<A, B> = Fn(&A) -> &B;

fn main() {}
23 changes: 23 additions & 0 deletions src/test/ui/type-alias-impl-trait/issue-57611-trait-alias.stderr
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
error[E0631]: type mismatch in closure arguments
--> $DIR/issue-57611-trait-alias.rs:17:5
|
LL | type Bar = impl Baz<Self, Self>;
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected signature of `for<'r> fn(&'r X) -> _`
...
LL | |x| x
| ----- found signature of `fn(_) -> _`
|
= note: the return type of a function must have a statically known size

error[E0271]: type mismatch resolving `for<'r> <[closure@$DIR/issue-57611-trait-alias.rs:21:9: 21:14] as std::ops::FnOnce<(&'r X,)>>::Output == &'r X`
--> $DIR/issue-57611-trait-alias.rs:17:5
|
LL | type Bar = impl Baz<Self, Self>;
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected bound lifetime parameter, found concrete lifetime
|
= note: the return type of a function must have a statically known size

error: aborting due to 2 previous errors

Some errors have detailed explanations: E0271, E0631.
For more information about an error, try `rustc --explain E0271`.
31 changes: 31 additions & 0 deletions src/test/ui/type-alias-impl-trait/issue-57807-associated-type.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
// Regression test for issue #57807 - ensure
// that we properly unify associated types within
// a type alias impl trait
// check-pass
#![feature(type_alias_impl_trait)]

trait Bar {
type A;
}

impl Bar for () {
type A = ();
}

trait Foo {
type A;
type B: Bar<A = Self::A>;

fn foo() -> Self::B;
}

impl Foo for () {
type A = ();
type B = impl Bar<A = Self::A>;

fn foo() -> Self::B {
()
}
}

fn main() {}

0 comments on commit c662f45

Please sign in to comment.