diff options
author | Jason Zaugg <jzaugg@gmail.com> | 2012-05-26 22:49:12 +0200 |
---|---|---|
committer | Jason Zaugg <jzaugg@gmail.com> | 2012-05-27 12:18:44 +0200 |
commit | c82bc67737a31f2a639172e677cafdefe8fdbf4e (patch) | |
tree | 6da5069e6c92b72e36d5118cb79424f511d1fe2b /test/files/pos | |
parent | 688c558b0257636f8f46240616b8b3d448847a47 (diff) | |
download | scala-c82bc67737a31f2a639172e677cafdefe8fdbf4e.tar.gz scala-c82bc67737a31f2a639172e677cafdefe8fdbf4e.tar.bz2 scala-c82bc67737a31f2a639172e677cafdefe8fdbf4e.zip |
Fix a NSDNHAO in extension methods.
A bridge method, created when we override a method from
a superclass and refine the return type, was appearing
as an overloaded alternative. (`erasure` doesn't create
new scopes, so the bridges it builds are visible at
earlier phases.)
The problem was masked when compiling with specialization,
which *does* create a new scope, shielding the code in
question from the artefacts of erasure.
To fix the problem, we filter out bridge methods from
the overloaded alternatives returned by `.decl`, as would
happen internally in `.member`.
Diffstat (limited to 'test/files/pos')
-rw-r--r-- | test/files/pos/value-class-override-no-spec.flags | 1 | ||||
-rw-r--r-- | test/files/pos/value-class-override-no-spec.scala | 9 | ||||
-rw-r--r-- | test/files/pos/value-class-override-spec.scala | 9 |
3 files changed, 19 insertions, 0 deletions
diff --git a/test/files/pos/value-class-override-no-spec.flags b/test/files/pos/value-class-override-no-spec.flags new file mode 100644 index 0000000000..a7e64e4f0c --- /dev/null +++ b/test/files/pos/value-class-override-no-spec.flags @@ -0,0 +1 @@ +-no-specialization
\ No newline at end of file diff --git a/test/files/pos/value-class-override-no-spec.scala b/test/files/pos/value-class-override-no-spec.scala new file mode 100644 index 0000000000..79de5d9305 --- /dev/null +++ b/test/files/pos/value-class-override-no-spec.scala @@ -0,0 +1,9 @@ +// There are two versions of this tests: one with and one without specialization. +// The bug was only exposed *without* specialization. +trait T extends Any { + def x: Any +} + +final class StringOps(val repr0: String) extends AnyVal with T { + def x = () +} diff --git a/test/files/pos/value-class-override-spec.scala b/test/files/pos/value-class-override-spec.scala new file mode 100644 index 0000000000..79de5d9305 --- /dev/null +++ b/test/files/pos/value-class-override-spec.scala @@ -0,0 +1,9 @@ +// There are two versions of this tests: one with and one without specialization. +// The bug was only exposed *without* specialization. +trait T extends Any { + def x: Any +} + +final class StringOps(val repr0: String) extends AnyVal with T { + def x = () +} |