File tree 2 files changed +20
-6
lines changed
compiler/src/dotty/tools/dotc/transform 2 files changed +20
-6
lines changed Original file line number Diff line number Diff line change @@ -626,17 +626,19 @@ object Erasure extends TypeTestsCasts{
626
626
627
627
if (isRequired) {
628
628
// 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
+ ! denot.symbol.owner.is(Flags .Trait ) && (denot.symbol.owner ne defn.ObjectClass ) &&
632
+ ! denot.symbol.owner.derivesFrom(bridge.owner) && denot.symbol.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)
634
636
.map(_.symbol))
635
637
clash match {
636
638
case Some (cl) =>
637
639
ctx.error(i " bridge for method ${newSymbol.showLocated(beforeCtx)} of type ${newSymbol.info(beforeCtx)}\n " +
638
640
i " clashes with ${cl.symbol.showLocated(beforeCtx)} of type ${cl.symbol.info(beforeCtx)}\n " +
639
- i " both have same type after erasure: ${bridge.symbol.info}" )
641
+ i " both have same type after erasure: ${bridge.symbol.info}" , newSymbol.pos )
640
642
case None => minimalSet += bridge
641
643
}
642
644
}
Original file line number Diff line number Diff line change
1
+
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 // error
7
+ }
8
+ object C {
9
+ def main (args : Array [String ]): Unit = {
10
+ println(new B ().compareTo(new Object ()))
11
+ }
12
+ }
You can’t perform that action at this time.
0 commit comments