Skip to content

Commit 1379208

Browse files
committed
Memoize: perform required tree adaptation in setter.
Otherwise can create trees that do not pas Ycheck.
1 parent 1de8207 commit 1379208

File tree

1 file changed

+2
-2
lines changed

1 file changed

+2
-2
lines changed

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -85,13 +85,13 @@ import Decorators._
8585
case _ =>
8686
var rhs = tree.rhs.changeOwnerAfter(sym, field, thisTransform)
8787
if (isWildcardArg(rhs)) rhs = EmptyTree
88-
val fieldDef = transformFollowing(ValDef(field, rhs))
88+
val fieldDef = transformFollowing(ValDef(field, if(!rhs.isEmpty) Erasure.Boxing.adaptToType(rhs, field.info.widen) else rhs))
8989
val getterDef = cpy.DefDef(tree)(rhs = transformFollowingDeep(ref(field))(ctx.withOwner(sym), info))
9090
Thicket(fieldDef, getterDef)
9191
}
9292
} else if (sym.isSetter) {
9393
if (!sym.is(ParamAccessor)) { val Literal(Constant(())) = tree.rhs } // this is intended as an assertion
94-
val initializer = Assign(ref(field), ref(tree.vparamss.head.head.symbol))
94+
val initializer = Assign(ref(field), Erasure.Boxing.adaptToType(ref(tree.vparamss.head.head.symbol), field.info.widen))
9595
cpy.DefDef(tree)(rhs = transformFollowingDeep(initializer)(ctx.withOwner(sym), info))
9696
}
9797
else tree // curiously, some accessors from Scala2 have ' ' suffixes. They count as

0 commit comments

Comments
 (0)