summaryrefslogtreecommitdiff
path: root/src/compiler
diff options
context:
space:
mode:
authorEugene Burmako <xeno.by@gmail.com>2013-11-08 09:53:06 -0800
committerEugene Burmako <xeno.by@gmail.com>2013-11-08 09:53:06 -0800
commite057fa5e08e352f1c9ce57b4f86f1c69be02c72a (patch)
tree3c5805b196eebcdaab07262effca5197bf0502c5 /src/compiler
parent0354d4bea7f900d329c17542d414f6969b239901 (diff)
parentd15ed081efdcb70bb77b5f76b2ac36a7e6b009ba (diff)
downloadscala-e057fa5e08e352f1c9ce57b4f86f1c69be02c72a.tar.gz
scala-e057fa5e08e352f1c9ce57b4f86f1c69be02c72a.tar.bz2
scala-e057fa5e08e352f1c9ce57b4f86f1c69be02c72a.zip
Merge pull request #3110 from xeno-by/topic/7776-backport
[backport] SI-7776 post-erasure signature clashes are now macro-aware
Diffstat (limited to 'src/compiler')
-rw-r--r--src/compiler/scala/tools/nsc/transform/Erasure.scala8
1 files changed, 6 insertions, 2 deletions
diff --git a/src/compiler/scala/tools/nsc/transform/Erasure.scala b/src/compiler/scala/tools/nsc/transform/Erasure.scala
index 76249974ac..abd3262c56 100644
--- a/src/compiler/scala/tools/nsc/transform/Erasure.scala
+++ b/src/compiler/scala/tools/nsc/transform/Erasure.scala
@@ -895,6 +895,9 @@ abstract class Erasure extends AddInterfaces
* but their erased types are the same.
*/
private def checkNoDoubleDefs(root: Symbol) {
+ def sameTypeAfterErasure(sym1: Symbol, sym2: Symbol) =
+ afterPostErasure(sym1.info =:= sym2.info) && !sym1.isMacro && !sym2.isMacro
+
def doubleDefError(sym1: Symbol, sym2: Symbol) {
// the .toString must also be computed at the earlier phase
val tpe1 = afterRefchecks(root.thisType.memberType(sym1))
@@ -920,7 +923,7 @@ abstract class Erasure extends AddInterfaces
if (e.sym.isTerm) {
var e1 = decls.lookupNextEntry(e)
while (e1 ne null) {
- if (afterPostErasure(e1.sym.info =:= e.sym.info)) doubleDefError(e.sym, e1.sym)
+ if (sameTypeAfterErasure(e1.sym, e.sym)) doubleDefError(e.sym, e1.sym)
e1 = decls.lookupNextEntry(e1)
}
}
@@ -939,7 +942,8 @@ abstract class Erasure extends AddInterfaces
while (opc.hasNext) {
if (!afterRefchecks(
root.thisType.memberType(opc.overriding) matches
- root.thisType.memberType(opc.overridden))) {
+ root.thisType.memberType(opc.overridden)) &&
+ sameTypeAfterErasure(opc.overriding, opc.overridden)) {
debuglog("" + opc.overriding.locationString + " " +
opc.overriding.infosString +
opc.overridden.locationString + " " +