Skip to content

Commit d21036c

Browse files
committed
LazyVals: Synchronized is Object => Object after erasure, #505
1 parent f0e105e commit d21036c

File tree

1 file changed

+5
-2
lines changed

1 file changed

+5
-2
lines changed

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

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import scala.collection.mutable.ListBuffer
2222
import dotty.tools.dotc.core.Denotations.SingleDenotation
2323
import dotty.tools.dotc.core.SymDenotations.SymDenotation
2424
import dotty.tools.dotc.core.DenotTransformers.{SymTransformer, IdentityDenotTransformer, DenotTransformer}
25+
import Erasure.Boxing.adaptToType
2526

2627
class LazyVals extends MiniPhaseTransform with IdentityDenotTransformer {
2728
import LazyVals._
@@ -103,8 +104,10 @@ class LazyVals extends MiniPhaseTransform with IdentityDenotTransformer {
103104
val flag = ref(holderSymbol).select(nme_initialized)
104105
val initer = valueInitter.changeOwner(x.symbol, initSymbol)
105106
val initBody =
106-
ref(holderSymbol).select(defn.Object_synchronized).appliedTo(
107-
mkNonThreadSafeDef(result, flag, initer)).ensureConforms(tpe)
107+
adaptToType(
108+
ref(holderSymbol).select(defn.Object_synchronized).appliedTo(
109+
adaptToType(mkNonThreadSafeDef(result, flag, initer), defn.ObjectType)),
110+
tpe)
108111
val initTree = DefDef(initSymbol, initBody)
109112
val holderTree = ValDef(holderSymbol, New(holderImpl.typeRef, List()))
110113
val methodBody = {

0 commit comments

Comments
 (0)