diff options
-rw-r--r-- | src/compiler/scala/tools/nsc/matching/PatternNodes.scala | 5 | ||||
-rw-r--r-- | src/compiler/scala/tools/nsc/symtab/Symbols.scala | 3 | ||||
-rw-r--r-- | test/files/pos/t1107/O.scala | 13 | ||||
-rw-r--r-- | test/files/pos/t1107/T.scala | 7 |
4 files changed, 25 insertions, 3 deletions
diff --git a/src/compiler/scala/tools/nsc/matching/PatternNodes.scala b/src/compiler/scala/tools/nsc/matching/PatternNodes.scala index 53dcdc1bb6..83fb17c213 100644 --- a/src/compiler/scala/tools/nsc/matching/PatternNodes.scala +++ b/src/compiler/scala/tools/nsc/matching/PatternNodes.scala @@ -83,9 +83,10 @@ trait PatternNodes { def cmp(other: Type): TypeComparison = TypeComparison(tpe, tpeWRTEquality(other)) def coversSym(sym: Symbol) = { + lazy val lmoc = sym.linkedModuleOfClass val symtpe = - if ((sym hasFlag Flags.MODULE) && (sym.linkedModuleOfClass ne NoSymbol)) - singleType(sym.tpe.prefix, sym.linkedModuleOfClass) // e.g. None, Nil + if ((sym hasFlag Flags.MODULE) && (lmoc ne NoSymbol)) + singleType(sym.tpe.prefix, lmoc) // e.g. None, Nil else sym.tpe (tpe.typeSymbol == sym) || diff --git a/src/compiler/scala/tools/nsc/symtab/Symbols.scala b/src/compiler/scala/tools/nsc/symtab/Symbols.scala index 47048f2acc..0e91e1b5bb 100644 --- a/src/compiler/scala/tools/nsc/symtab/Symbols.scala +++ b/src/compiler/scala/tools/nsc/symtab/Symbols.scala @@ -1029,7 +1029,8 @@ trait Symbols { */ final def linkedClassOfModule: Symbol = { if (this != NoSymbol) - owner.info.decl(name.toTypeName).suchThat(_ isCoDefinedWith this) + owner.rawInfo.decl(name.toTypeName).suchThat( + sym => !sym.hasFlag(MODULE) && (sym isCoDefinedWith this)) else NoSymbol } diff --git a/test/files/pos/t1107/O.scala b/test/files/pos/t1107/O.scala new file mode 100644 index 0000000000..ffc2f767a8 --- /dev/null +++ b/test/files/pos/t1107/O.scala @@ -0,0 +1,13 @@ +object O +{ + def d(t: Top) = t match { + case s: Sub => true + case _ => false + } + + def main(args: Array[String]): Unit = { + val c = new AnyRef with C + + c.bob.toString + c.bob2.toString + } +}
\ No newline at end of file diff --git a/test/files/pos/t1107/T.scala b/test/files/pos/t1107/T.scala new file mode 100644 index 0000000000..583ee11c0a --- /dev/null +++ b/test/files/pos/t1107/T.scala @@ -0,0 +1,7 @@ +sealed trait Top +sealed trait Sub extends Top +trait C { + private object P extends Sub + def bob() = P.getClass + def bob2() = O.d(P) +}
\ No newline at end of file |