diff options
-rw-r--r-- | src/dotty/tools/dotc/core/unpickleScala2/Scala2Unpickler.scala | 6 | ||||
-rw-r--r-- | test/dotc/tests.scala | 1 | ||||
-rw-r--r-- | tests/pos-special/i859.scala | 3 |
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 = ??? +} |