Skip to content

Commit ece7656

Browse files
committed
Erasure should copy denotations only if they are changed.
1 parent deaa0d8 commit ece7656

File tree

1 file changed

+11
-6
lines changed

1 file changed

+11
-6
lines changed

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

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ import dotty.tools.dotc.core.Flags
2525
import ValueClasses._
2626
import 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

Comments
 (0)