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:
commit
76300d52f7
2 changed files with 64 additions and 0 deletions
50
src/test/ui/type-alias-impl-trait/issue-63355.rs
Normal file
50
src/test/ui/type-alias-impl-trait/issue-63355.rs
Normal 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() {}
|
14
src/test/ui/type-alias-impl-trait/issue-63355.stderr
Normal file
14
src/test/ui/type-alias-impl-trait/issue-63355.stderr
Normal 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`.
|
Loading…
Add table
Add a link
Reference in a new issue