Skip to content

Commit 568b1e7

Browse files
committed
ElimRepeated: Do not use installAfter
This was a mistake introduced in the previous commit, installAfter is only safe to use in `IdentityDenotTransformer` phases, otherwise it means that the phase denotation transformer is not run at all for this particular denotation, this caused Ycheck to fail.
1 parent e5e691e commit 568b1e7

File tree

1 file changed

+14
-6
lines changed

1 file changed

+14
-6
lines changed

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

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,21 @@ class ElimRepeated extends MiniPhaseTransform with InfoTransformer with Annotati
3232
def transformInfo(tp: Type, sym: Symbol)(implicit ctx: Context): Type =
3333
elimRepeated(tp)
3434

35+
36+
override def transform(ref: SingleDenotation)(implicit ctx: Context): SingleDenotation =
37+
super.transform(ref) match {
38+
case ref1: SymDenotation if (ref1 ne ref) && overridesJava(ref1.symbol) =>
39+
// This method won't override the corresponding Java method at the end of this phase,
40+
// only the bridge added by `addVarArgsBridge` will.
41+
ref1.copySymDenotation(initFlags = ref1.flags &~ Override)
42+
case ref1 =>
43+
ref1
44+
}
45+
3546
override def mayChange(sym: Symbol)(implicit ctx: Context): Boolean = sym is Method
3647

48+
private def overridesJava(sym: Symbol)(implicit ctx: Context) = sym.allOverriddenSymbols.exists(_ is JavaDefined)
49+
3750
private def elimRepeated(tp: Type)(implicit ctx: Context): Type = tp.stripTypeVar match {
3851
case tp @ MethodType(paramNames, paramTypes) =>
3952
val resultType1 = elimRepeated(tp.resultType)
@@ -93,8 +106,7 @@ class ElimRepeated extends MiniPhaseTransform with InfoTransformer with Annotati
93106
*/
94107
override def transformDefDef(tree: DefDef)(implicit ctx: Context, info: TransformerInfo): Tree = {
95108
assert(ctx.phase == thisTransformer)
96-
def overridesJava = tree.symbol.allOverriddenSymbols.exists(_ is JavaDefined)
97-
if (tree.symbol.info.isVarArgsMethod && overridesJava)
109+
if (tree.symbol.info.isVarArgsMethod && overridesJava(tree.symbol))
98110
addVarArgsBridge(tree)
99111
else
100112
tree
@@ -121,10 +133,6 @@ class ElimRepeated extends MiniPhaseTransform with InfoTransformer with Annotati
121133
.appliedToArgss(vrefss1)
122134
})
123135

124-
// Drop the override flag on the user-written method, only the added bridge
125-
// is a real override.
126-
original.copySymDenotation(initFlags = original.flags &~ Override).installAfter(thisTransformer)
127-
128136
Thicket(ddef, bridgeDef)
129137
}
130138

0 commit comments

Comments
 (0)