@@ -25,7 +25,7 @@ import dotty.tools.dotc.core.Flags
2525import ValueClasses ._
2626import TypeUtils ._
2727
28- class Erasure extends Phase with DenotTransformer {
28+ class Erasure extends Phase with DenotTransformer { thisTransformer =>
2929
3030 override def name : String = " erasure"
3131
@@ -46,10 +46,15 @@ class Erasure extends Phase with DenotTransformer {
4646 )
4747 }
4848 else {
49- val owner = ref.owner
50- ref.copySymDenotation(
51- owner = if (owner eq defn.AnyClass ) defn.ObjectClass else owner,
52- info = transformInfo(ref.symbol, ref.info))
49+ val oldOwner = ref.owner
50+ val newOwner = if (oldOwner eq defn.AnyClass ) defn.ObjectClass else oldOwner
51+ val oldInfo = ref.info
52+ val newInfo = transformInfo(ref.symbol, oldInfo)
53+ if ((oldOwner eq newOwner) && (oldInfo eq newInfo)) ref
54+ else {
55+ assert(! ref.is(Flags .PackageClass ), s " trans $ref @ ${ctx.phase} oldOwner = $oldOwner, newOwner = $newOwner, oldInfo = $oldInfo, newInfo = $newInfo ${oldOwner eq newOwner} ${oldInfo eq newInfo}" )
56+ ref.copySymDenotation(owner = newOwner, info = newInfo)
57+ }
5358 }
5459 case ref =>
5560 ref.derivedSingleDenotation(ref.symbol, erasure(ref.info))
@@ -359,7 +364,7 @@ object Erasure {
359364 }
360365 val bridge = ctx.newSymbol(newDef.symbol.owner,
361366 parentSym.name, parentSym.flags | Flags .Bridge , parentSym.info, coord = newDef.symbol.owner.coord).asTerm
362- bridge.entered // this should be safe, as we're executing in context of next phase
367+ bridge.enteredAfter(ctx.phase.prev. asInstanceOf [ DenotTransformer ]) // this should be safe, as we're executing in context of next phase
363368 ctx.debuglog(s " generating bridge from ${newDef.symbol} to $bridge" )
364369
365370 val sel : Tree = This (newDef.symbol.owner.asClass).select(newDef.symbol.termRef)
0 commit comments