65c1f54a06
There is no type T, such that `T = [T; 2]`, we should not allow this to be circumvented by impl Trait.
26 lines
553 B
Rust
26 lines
553 B
Rust
// Test that attempts to construct infinite types via impl trait fail
|
|
// in a graceful way.
|
|
//
|
|
// Regression test for #38064.
|
|
|
|
trait Quux {}
|
|
|
|
fn foo() -> impl Quux { //~ opaque type expands to a recursive type
|
|
struct Foo<T>(T);
|
|
impl<T> Quux for Foo<T> {}
|
|
Foo(bar())
|
|
}
|
|
|
|
fn bar() -> impl Quux { //~ opaque type expands to a recursive type
|
|
struct Bar<T>(T);
|
|
impl<T> Quux for Bar<T> {}
|
|
Bar(foo())
|
|
}
|
|
|
|
// effectively:
|
|
// struct Foo(Bar);
|
|
// struct Bar(Foo);
|
|
// should produce an error about infinite size
|
|
|
|
fn main() { foo(); }
|