summaryrefslogtreecommitdiff
path: root/test/files/pos/t9630
diff options
context:
space:
mode:
authorJason Zaugg <jzaugg@gmail.com>2016-01-27 19:01:25 +1000
committerJason Zaugg <jzaugg@gmail.com>2016-01-29 11:09:17 +1000
commit79a52e6807d2797dee12bab1730765441a0e222d (patch)
tree7dadef54293eee75a2cf93572a0365bd1bea0dc9 /test/files/pos/t9630
parentbbd890bf907c00f17df39eb4bc656b30d4317b9a (diff)
downloadscala-79a52e6807d2797dee12bab1730765441a0e222d.tar.gz
scala-79a52e6807d2797dee12bab1730765441a0e222d.tar.bz2
scala-79a52e6807d2797dee12bab1730765441a0e222d.zip
SI-9630 Fix spurious warning related to same-named case accessors
Hash consing of trees within pattern match analysis was broken, and considered `x1.foo#1` to be the same tree as `x1.foo#2`, even though the two `foo`-s referred to different symbols. The hash consing was based on `Tree#correspondsStructure`, but the predicate in that function cannot veto correspondance, it can only supplement the default structural comparison. I've instead created a custom tree comparison method for use in the pattern matcher that handles the tree shapes that we use.
Diffstat (limited to 'test/files/pos/t9630')
-rw-r--r--test/files/pos/t9630/t9630a.scala9
-rw-r--r--test/files/pos/t9630/t9630b.scala8
2 files changed, 17 insertions, 0 deletions
diff --git a/test/files/pos/t9630/t9630a.scala b/test/files/pos/t9630/t9630a.scala
new file mode 100644
index 0000000000..c76ecd2ff2
--- /dev/null
+++ b/test/files/pos/t9630/t9630a.scala
@@ -0,0 +1,9 @@
+
+sealed trait Base
+final case class Base_1(sameName: Some[Any]) extends Base
+final case class Base_2(sameName: Nested) extends Base
+
+sealed trait Nested
+final case class Nested_1(x: Any) extends Nested
+final case class Nested_2(y: Any) extends Nested
+
diff --git a/test/files/pos/t9630/t9630b.scala b/test/files/pos/t9630/t9630b.scala
new file mode 100644
index 0000000000..3e1787ec52
--- /dev/null
+++ b/test/files/pos/t9630/t9630b.scala
@@ -0,0 +1,8 @@
+
+class Test {
+ def test(b: Base): Unit = b match {
+ case Base_1(Some(_)) =>
+ case Base_2(Nested_1(_)) =>
+ case Base_2(Nested_2(_)) =>
+ }
+}