diff options
author | Eugene Burmako <xeno.by@gmail.com> | 2013-11-08 09:53:06 -0800 |
---|---|---|
committer | Eugene Burmako <xeno.by@gmail.com> | 2013-11-08 09:53:06 -0800 |
commit | e057fa5e08e352f1c9ce57b4f86f1c69be02c72a (patch) | |
tree | 3c5805b196eebcdaab07262effca5197bf0502c5 /src | |
parent | 0354d4bea7f900d329c17542d414f6969b239901 (diff) | |
parent | d15ed081efdcb70bb77b5f76b2ac36a7e6b009ba (diff) | |
download | scala-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')
-rw-r--r-- | src/compiler/scala/tools/nsc/transform/Erasure.scala | 8 |
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 + " " + |