Skip to content

Commit 8088a59

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

File tree

1 file changed

+6
-2
lines changed

1 file changed

+6
-2
lines changed

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

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -85,13 +85,17 @@ 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+
89+
def adaptToField(tree: Tree) =
90+
if (tree.isEmpty) tree else tree.ensureConforms(field.info.widen)
91+
92+
val fieldDef = transformFollowing(ValDef(field, adaptToField(rhs))
8993
val getterDef = cpy.DefDef(tree)(rhs = transformFollowingDeep(ref(field))(ctx.withOwner(sym), info))
9094
Thicket(fieldDef, getterDef)
9195
}
9296
} else if (sym.isSetter) {
9397
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))
98+
val initializer = Assign(ref(field), Erasure.Boxing.adaptToType(ref(tree.vparamss.head.head.symbol), field.info.widen))
9599
cpy.DefDef(tree)(rhs = transformFollowingDeep(initializer)(ctx.withOwner(sym), info))
96100
}
97101
else tree // curiously, some accessors from Scala2 have ' ' suffixes. They count as

0 commit comments

Comments
 (0)