aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/dotty/tools/dotc/core/unpickleScala2/Scala2Unpickler.scala6
-rw-r--r--test/dotc/tests.scala1
-rw-r--r--tests/pos-special/i859.scala3
3 files changed, 8 insertions, 2 deletions
diff --git a/src/dotty/tools/dotc/core/unpickleScala2/Scala2Unpickler.scala b/src/dotty/tools/dotc/core/unpickleScala2/Scala2Unpickler.scala
index 618e3ceea..abf31a006 100644
--- a/src/dotty/tools/dotc/core/unpickleScala2/Scala2Unpickler.scala
+++ b/src/dotty/tools/dotc/core/unpickleScala2/Scala2Unpickler.scala
@@ -101,10 +101,12 @@ object Scala2Unpickler {
case cinfo => (Nil, cinfo)
}
val ost =
- if ((selfInfo eq NoType) && (denot is ModuleClass))
+ if ((selfInfo eq NoType) && (denot is ModuleClass) && denot.sourceModule.exists)
+ // it seems sometimes the source module does not exist for a module class.
+ // An example is `scala.reflect.internal.Trees.Template$. Without the
+ // `denot.sourceModule.exists` provision i859.scala crashes in the backend.
denot.owner.thisType select denot.sourceModule
else selfInfo
-
denot.info = ClassInfo(denot.owner.thisType, denot.classSymbol, Nil, decls, ost) // first rough info to avoid CyclicReferences
var parentRefs = ctx.normalizeToClassRefs(parents, cls, decls)
if (parentRefs.isEmpty) parentRefs = defn.ObjectType :: Nil
diff --git a/test/dotc/tests.scala b/test/dotc/tests.scala
index 2944d69e9..16917742d 100644
--- a/test/dotc/tests.scala
+++ b/test/dotc/tests.scala
@@ -103,6 +103,7 @@ class tests extends CompilerTest {
@Test def pos_i871 = compileFile(posSpecialDir, "i871", scala2mode)
@Test def pos_variancesConstr = compileFile(posSpecialDir, "variances-constr", scala2mode)
+ @Test def pos_859 = compileFile(posSpecialDir, "i859", scala2mode)(allowDeepSubtypes)
@Test def new_all = compileFiles(newDir, twice)
diff --git a/tests/pos-special/i859.scala b/tests/pos-special/i859.scala
new file mode 100644
index 000000000..a9f6b51c9
--- /dev/null
+++ b/tests/pos-special/i859.scala
@@ -0,0 +1,3 @@
+class Analyzer {
+ def foo: scala.tools.nsc.Global = ???
+}