Skip to content

Commit 384dca9

Browse files
committed
Fix #5332: Catch recursion in memberNames
1 parent 0fcbfdb commit 384dca9

File tree

2 files changed

+21
-10
lines changed

2 files changed

+21
-10
lines changed

compiler/src/dotty/tools/dotc/core/SymDenotations.scala

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1779,16 +1779,22 @@ object SymDenotations {
17791779
def computeMemberNames(keepOnly: NameFilter)(implicit onBehalf: MemberNames, ctx: Context): Set[Name] = {
17801780
var names = Set[Name]()
17811781
def maybeAdd(name: Name) = if (keepOnly(thisType, name)) names += name
1782-
for (p <- classParents)
1783-
for (name <- p.classSymbol.asClass.memberNames(keepOnly))
1784-
maybeAdd(name)
1785-
val ownSyms =
1786-
if (keepOnly eq implicitFilter)
1787-
if (this is Package) Iterator.empty
1788-
else info.decls.iterator filter (_ is Implicit)
1789-
else info.decls.iterator
1790-
for (sym <- ownSyms) maybeAdd(sym.name)
1791-
names
1782+
try {
1783+
for (p <- classParents)
1784+
for (name <- p.classSymbol.asClass.memberNames(keepOnly))
1785+
maybeAdd(name)
1786+
val ownSyms =
1787+
if (keepOnly eq implicitFilter)
1788+
if (this is Package) Iterator.empty
1789+
else info.decls.iterator filter (_ is Implicit)
1790+
else info.decls.iterator
1791+
for (sym <- ownSyms) maybeAdd(sym.name)
1792+
names
1793+
}
1794+
catch {
1795+
case ex: Throwable =>
1796+
handleRecursive("member names", i"of $this", ex)
1797+
}
17921798
}
17931799

17941800
override final def fullNameSeparated(kind: QualifiedNameKind)(implicit ctx: Context): Name = {

tests/neg/i5332.scala

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
2+
object O{
3+
type T[R] = X
4+
class X extends T[Int] // error
5+
}

0 commit comments

Comments
 (0)