File tree Expand file tree Collapse file tree 1 file changed +10
-2
lines changed
compiler/src/dotty/tools/dotc/core/tasty Expand file tree Collapse file tree 1 file changed +10
-2
lines changed Original file line number Diff line number Diff line change @@ -631,8 +631,13 @@ class TreeUnpickler(reader: TastyReader,
631
631
* or else read definition.
632
632
*/
633
633
def readIndexedDef ()(implicit ctx : Context ): Tree = treeAtAddr.remove(currentAddr) match {
634
- case Some (tree) => skipTree(); tree
635
- case none => readNewDef()
634
+ case Some (tree) =>
635
+ assert(tree != PoisonTree , s " Cyclic reference while unpickling definition at address ${currentAddr.index}" )
636
+ skipTree()
637
+ tree
638
+ case none =>
639
+ treeAtAddr.put(currentAddr, PoisonTree )
640
+ readNewDef()
636
641
}
637
642
638
643
private def readNewDef ()(implicit ctx : Context ): Tree = {
@@ -1169,6 +1174,9 @@ class TreeUnpickler(reader: TastyReader,
1169
1174
1170
1175
object TreeUnpickler {
1171
1176
1177
+ /** A marker value used to detect cyclic reference while unpickling definitions. */
1178
+ @ sharable val PoisonTree : tpd.Tree = Thicket (Nil )
1179
+
1172
1180
/** An enumeration indicating which subtrees should be added to an OwnerTree. */
1173
1181
type MemberDefMode = Int
1174
1182
final val MemberDefsOnly = 0 // add only member defs; skip other statements
You can’t perform that action at this time.
0 commit comments