Rollup merge of #86763 - JohnTitor:test-63355, r=oli-obk

Add a regression test for issue-63355

Closes #63355
r? ``@nikomatsakis``
This commit is contained in:
Yuki Okushi 2021-07-18 14:21:52 +09:00 committed by GitHub
commit 76300d52f7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 64 additions and 0 deletions

View File

@ -0,0 +1,50 @@
#![feature(min_type_alias_impl_trait)]
#![feature(type_alias_impl_trait)]
#![allow(incomplete_features)]
pub trait Foo {}
pub trait Bar {
type Foo: Foo;
fn foo() -> Self::Foo;
}
pub trait Baz {
type Foo: Foo;
type Bar: Bar<Foo = Self::Foo>;
fn foo() -> Self::Foo;
fn bar() -> Self::Bar;
}
impl Foo for () {}
impl Bar for () {
type Foo = FooImpl;
fn foo() -> Self::Foo {
()
}
}
// FIXME(#86731): The below is illegal use of `min_type_alias_impl_trait`
// but the compiler doesn't report it, we should fix it.
pub type FooImpl = impl Foo;
pub type BarImpl = impl Bar<Foo = FooImpl>;
//~^ ERROR: type mismatch resolving `<() as Bar>::Foo == ()`
impl Baz for () {
type Foo = FooImpl;
type Bar = BarImpl;
fn foo() -> Self::Foo {
()
}
fn bar() -> Self::Bar {
()
}
}
fn main() {}

View File

@ -0,0 +1,14 @@
error[E0271]: type mismatch resolving `<() as Bar>::Foo == ()`
--> $DIR/issue-63355.rs:34:20
|
LL | pub type FooImpl = impl Foo;
| -------- the found opaque type
LL | pub type BarImpl = impl Bar<Foo = FooImpl>;
| ^^^^^^^^^^^^^^^^^^^^^^^ expected `()`, found opaque type
|
= note: expected unit type `()`
found opaque type `impl Foo`
error: aborting due to previous error
For more information about this error, try `rustc --explain E0271`.