summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/compiler/scala/tools/nsc/matching/ParallelMatching.scala5
-rw-r--r--test/files/run/castsingleton.check (renamed from test/pending/run/castsingleton.check)0
-rw-r--r--test/files/run/castsingleton.scala (renamed from test/pending/run/castsingleton.scala)3
-rw-r--r--test/files/run/patmatnew.scala7
4 files changed, 11 insertions, 4 deletions
diff --git a/src/compiler/scala/tools/nsc/matching/ParallelMatching.scala b/src/compiler/scala/tools/nsc/matching/ParallelMatching.scala
index 7f7b492b79..1905cc31b5 100644
--- a/src/compiler/scala/tools/nsc/matching/ParallelMatching.scala
+++ b/src/compiler/scala/tools/nsc/matching/ParallelMatching.scala
@@ -1180,7 +1180,10 @@ trait ParallelMatching extends ast.TreeDSL {
case v @ Constant(null) if isAnyRef(scrutTree.tpe) => scrutTree ANY_EQ NULL
case v => scrutTree ANY_== Literal(v)
}
- case _: SingletonType if useEqTest => REF(tpe.termSymbol) ANY_== scrutTree
+ case _: SingletonType if useEqTest =>
+ // See ticket #1503 for why both these checks are necessary.
+ (REF(tpe.termSymbol) ANY_== scrutTree) AND (scrutTree IS tpe.widen)
+
case _ if scrutTree.tpe <:< tpe && isAnyRef(tpe) => scrutTree OBJ_!= NULL
case _ => scrutTree IS tpe
})
diff --git a/test/pending/run/castsingleton.check b/test/files/run/castsingleton.check
index 49742281f0..49742281f0 100644
--- a/test/pending/run/castsingleton.check
+++ b/test/files/run/castsingleton.check
diff --git a/test/pending/run/castsingleton.scala b/test/files/run/castsingleton.scala
index 171b380dc9..f907467741 100644
--- a/test/pending/run/castsingleton.scala
+++ b/test/files/run/castsingleton.scala
@@ -3,7 +3,8 @@ object Test extends Application {
object N extends L();
def empty(xs : L) : Unit = xs match {
- case x@N => println(x); println(x);
+ case x@N => println(x); println(x);
+ case x => println(x); println(x);
}
empty(L())
diff --git a/test/files/run/patmatnew.scala b/test/files/run/patmatnew.scala
index a16f300414..0ab5e92099 100644
--- a/test/files/run/patmatnew.scala
+++ b/test/files/run/patmatnew.scala
@@ -876,8 +876,11 @@ object C {
}
override def runTest() {
- assertTrue(empty( new L(Nil) ))
- assertTrue(singleton( new L(List(1)) ))
+ // We no longer assert these are true, because they are no longer true!
+ // See ticket #1503 for details, but it is unsound to let L(Nil) be
+ // seen as an N by the LHS of a match.
+ // assertTrue(empty( new L(Nil) ))
+ // assertTrue(singleton( new L(List(1)) ))
}
} // end Ticket346