Skip to content

Commit b26db93

Browse files
committed
Avoid mutation-during-iteration during package object initialization
1 parent 99bbc88 commit b26db93

File tree

1 file changed

+12
-2
lines changed

1 file changed

+12
-2
lines changed

src/compiler/scala/tools/nsc/typechecker/Analyzer.scala

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -89,8 +89,18 @@ trait Analyzer extends AnyRef
8989

9090
def apply(unit: CompilationUnit): Unit = {
9191
openPackageObjectsTraverser(unit.body)
92-
deferredOpen.foreach(openPackageModule(_))
93-
deferredOpen.clear()
92+
}
93+
94+
override def run(): Unit = {
95+
super.run()
96+
97+
for (sym <- deferredOpen.toVector) {
98+
if (deferredOpen.remove(sym)) {
99+
// this can remove entries from `deferredOpen`, hence the copy to a vector
100+
// and the check of `remove` return value
101+
openPackageModule(sym)
102+
}
103+
}
94104
}
95105
}
96106
}

0 commit comments

Comments
 (0)