Skip to content

Commit b874ed4

Browse files
authored
Merge pull request #5635 from dotty-staging/fix-#5332
Fix #5332: Catch recursion in memberNames
2 parents df6232b + 384dca9 commit b874ed4

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
@@ -1837,16 +1837,22 @@ object SymDenotations {
18371837
def computeMemberNames(keepOnly: NameFilter)(implicit onBehalf: MemberNames, ctx: Context): Set[Name] = {
18381838
var names = Set[Name]()
18391839
def maybeAdd(name: Name) = if (keepOnly(thisType, name)) names += name
1840-
for (p <- classParents)
1841-
for (name <- p.classSymbol.asClass.memberNames(keepOnly))
1842-
maybeAdd(name)
1843-
val ownSyms =
1844-
if (keepOnly eq implicitFilter)
1845-
if (this is Package) Iterator.empty
1846-
else info.decls.iterator filter (_ is Implicit)
1847-
else info.decls.iterator
1848-
for (sym <- ownSyms) maybeAdd(sym.name)
1849-
names
1840+
try {
1841+
for (p <- classParents)
1842+
for (name <- p.classSymbol.asClass.memberNames(keepOnly))
1843+
maybeAdd(name)
1844+
val ownSyms =
1845+
if (keepOnly eq implicitFilter)
1846+
if (this is Package) Iterator.empty
1847+
else info.decls.iterator filter (_ is Implicit)
1848+
else info.decls.iterator
1849+
for (sym <- ownSyms) maybeAdd(sym.name)
1850+
names
1851+
}
1852+
catch {
1853+
case ex: Throwable =>
1854+
handleRecursive("member names", i"of $this", ex)
1855+
}
18501856
}
18511857

18521858
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)