diff options
author | Jason Zaugg <jzaugg@gmail.com> | 2016-01-27 19:01:25 +1000 |
---|---|---|
committer | Jason Zaugg <jzaugg@gmail.com> | 2016-01-29 11:09:17 +1000 |
commit | 79a52e6807d2797dee12bab1730765441a0e222d (patch) | |
tree | 7dadef54293eee75a2cf93572a0365bd1bea0dc9 /test/files/pos/t9630 | |
parent | bbd890bf907c00f17df39eb4bc656b30d4317b9a (diff) | |
download | scala-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.scala | 9 | ||||
-rw-r--r-- | test/files/pos/t9630/t9630b.scala | 8 |
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(_)) => + } +} |