diff --git a/compiler/src/dotty/tools/dotc/core/tasty/TreePickler.scala b/compiler/src/dotty/tools/dotc/core/tasty/TreePickler.scala index e5fab768f976..f4edb6c0057b 100644 --- a/compiler/src/dotty/tools/dotc/core/tasty/TreePickler.scala +++ b/compiler/src/dotty/tools/dotc/core/tasty/TreePickler.scala @@ -552,6 +552,7 @@ class TreePickler(pickler: TastyPickler) { if (refinements.isEmpty) pickleTree(parent) else { val refineCls = refinements.head.symbol.owner.asClass + registerDef(refineCls) pickledTypes.put(refineCls.typeRef, currentAddr) writeByte(REFINEDtpt) refinements.foreach(preRegister) diff --git a/compiler/src/dotty/tools/dotc/core/tasty/TreeUnpickler.scala b/compiler/src/dotty/tools/dotc/core/tasty/TreeUnpickler.scala index 4bfafc68e752..63a99d31676c 100644 --- a/compiler/src/dotty/tools/dotc/core/tasty/TreeUnpickler.scala +++ b/compiler/src/dotty/tools/dotc/core/tasty/TreeUnpickler.scala @@ -1167,7 +1167,9 @@ class TreeUnpickler(reader: TastyReader, val argPats = until(end)(readTerm()) UnApply(fn, implicitArgs, argPats, patType) case REFINEDtpt => - val refineCls = ctx.newRefinedClassSymbol(coordAt(start)) + val refineCls = symAtAddr.getOrElse(start, + ctx.newRefinedClassSymbol(coordAt(start))).asClass + registerSym(start, refineCls) typeAtAddr(start) = refineCls.typeRef val parent = readTpt() val refinements = readStats(refineCls, end)(localContext(refineCls)) diff --git a/tests/pos/i7711/crash1_1.scala b/tests/pos/i7711/crash1_1.scala new file mode 100644 index 000000000000..bd0d3e999e9e --- /dev/null +++ b/tests/pos/i7711/crash1_1.scala @@ -0,0 +1,9 @@ +package scalaLibV + +import reflect.Selectable.reflectiveSelectable + +// Church-encoded Booleans, in DOT. +type IFT = (x : { type IFTA }) => x.IFTA => x.IFTA => x.IFTA + +val iftTrue : IFT = + x => t => f => t diff --git a/tests/pos/i7711/crash2_1.scala b/tests/pos/i7711/crash2_1.scala new file mode 100644 index 000000000000..f7d02ecff033 --- /dev/null +++ b/tests/pos/i7711/crash2_1.scala @@ -0,0 +1,8 @@ +package listV + +//import reflect.Selectable.reflectiveSelectable +import scalaLibV._ + +object sci { + val isEmpty = iftTrue +} \ No newline at end of file diff --git a/tests/pos/i7711/crash2_2.scala b/tests/pos/i7711/crash2_2.scala new file mode 100644 index 000000000000..f41585fd7110 --- /dev/null +++ b/tests/pos/i7711/crash2_2.scala @@ -0,0 +1,8 @@ +package listV + +//import reflect.Selectable.reflectiveSelectable +import scalaLibV._ + +object sci { + val isEmpty = iftTrue // 1nd try +} \ No newline at end of file