diff options
-rw-r--r-- | src/dotty/tools/dotc/typer/Namer.scala | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/src/dotty/tools/dotc/typer/Namer.scala b/src/dotty/tools/dotc/typer/Namer.scala index 3f732f80c..3c491fa7a 100644 --- a/src/dotty/tools/dotc/typer/Namer.scala +++ b/src/dotty/tools/dotc/typer/Namer.scala @@ -575,7 +575,14 @@ class Namer { typer: Typer => def checkedParentType(parent: untpd.Tree): Type = { val ptype = parentType(parent)(ctx.superCallContext) if (cls.isRefinementClass) ptype - else checkClassTypeWithStablePrefix(ptype, parent.pos, traitReq = parent ne parents.head) + else { + val pt = checkClassTypeWithStablePrefix(ptype, parent.pos, traitReq = parent ne parents.head) + if (pt.derivesFrom(cls)) { + ctx.error(i"cyclic inheritance: $cls extends itself", parent.pos) + defn.ObjectClass.typeRef + } + else pt + } } val selfInfo = |