Skip to content

Commit 9ea920a

Browse files
committed
Fix #2202: Check bridge clash in super classes.
1 parent d514638 commit 9ea920a

File tree

2 files changed

+19
-5
lines changed

2 files changed

+19
-5
lines changed

compiler/src/dotty/tools/dotc/transform/Erasure.scala

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -626,11 +626,13 @@ object Erasure extends TypeTestsCasts{
626626

627627
if (isRequired) {
628628
// check for clashes
629-
val clash: Option[Symbol] = oldSymbol.owner.info.decls.lookupAll(bridge.name).find {
630-
sym =>
631-
(sym.name eq bridge.name) && sym.info.widen =:= bridge.info.widen
632-
}.orElse(
633-
emittedBridges.find(stat => (stat.name == bridge.name) && stat.tpe.widen =:= bridge.info.widen)
629+
val clash: Option[Symbol] = oldSymbol.owner.info.memberExcluding(bridge.name, Flags.Bridge).alternatives.find {
630+
denot => {
631+
val sym = denot.symbol
632+
!sym.owner.is(Flags.Trait) && (sym.owner ne bridge.owner) && sym.info.widen =:= bridge.info.widen
633+
}
634+
}.map(_.symbol).orElse(
635+
emittedBridges.find(stat => (stat.name eq bridge.name) && stat.tpe.widen =:= bridge.info.widen)
634636
.map(_.symbol))
635637
clash match {
636638
case Some(cl) =>

tests/neg/i2202.scala

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
// nopos-error
2+
class A {
3+
def compareTo(o: Any): Int = 0
4+
}
5+
class B extends A with Comparable[B] {
6+
def compareTo(b: B): Int = 0
7+
}
8+
object C {
9+
def main(args: Array[String]): Unit = {
10+
println(new B().compareTo(new Object()))
11+
}
12+
}

0 commit comments

Comments
 (0)