Skip to content

Commit d1b5ea3

Browse files
committed
Avoid mutation-during-iteration during package object initialization
1 parent f553f54 commit d1b5ea3

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
@@ -88,8 +88,18 @@ trait Analyzer extends AnyRef
8888

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

0 commit comments

Comments
 (0)