Fix stack overflow with recursive associated types

This commit is contained in:
Oli Scherer 2024-03-12 06:03:43 +00:00
parent 5aad51d015
commit 783490da70
3 changed files with 30 additions and 0 deletions

View file

@ -240,6 +240,10 @@ fn visit_ty(&mut self, t: Ty<'tcx>) {
continue;
}
if !self.seen.insert(assoc.def_id.expect_local()) {
return;
}
let impl_args = alias_ty.args.rebase_onto(
self.tcx,
impl_trait_ref.def_id,

View file

@ -0,0 +1,14 @@
trait Foo {
type Bar;
fn foo(self) -> Self::Bar;
}
impl Foo for Box<dyn Foo> {
//~^ ERROR: the value of the associated type `Bar` in `Foo` must be specified
type Bar = <Self as Foo>::Bar;
fn foo(self) -> <Self as Foo>::Bar {
(*self).foo()
}
}
fn main() {}

View file

@ -0,0 +1,12 @@
error[E0191]: the value of the associated type `Bar` in `Foo` must be specified
--> $DIR/associated-type-cycle.rs:6:22
|
LL | type Bar;
| -------- `Bar` defined here
...
LL | impl Foo for Box<dyn Foo> {
| ^^^ help: specify the associated type: `Foo<Bar = Type>`
error: aborting due to 1 previous error
For more information about this error, try `rustc --explain E0191`.