summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/compiler/scala/tools/nsc/matching/PatternNodes.scala5
-rw-r--r--src/compiler/scala/tools/nsc/symtab/Symbols.scala3
-rw-r--r--test/files/pos/t1107/O.scala13
-rw-r--r--test/files/pos/t1107/T.scala7
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