Skip to content

Commit f0c3320

Browse files
committed
SI-8570 set the checkinit bit for unit-typed fields of traits
Fix only, refactoring in subsequent commit.
1 parent 908ccd9 commit f0c3320

File tree

6 files changed

+33
-3
lines changed

6 files changed

+33
-3
lines changed

src/compiler/scala/tools/nsc/transform/Mixin.scala

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1042,15 +1042,18 @@ abstract class Mixin extends InfoTransform with ast.TreeDSL {
10421042
// add accessor definitions
10431043
addDefDef(sym, {
10441044
if (sym.isSetter) {
1045+
val getter = sym.getter(clazz)
1046+
def setInitFlag = mkSetFlag(clazz, fieldOffset(getter), getter, bitmapKind(getter))
10451047
if (isOverriddenSetter(sym)) UNIT
10461048
else accessedRef match {
1047-
case ref @ Literal(_) => ref
1049+
case ref @ Literal(_) =>
1050+
if (!needsInitFlag(getter)) ref
1051+
else Block(setInitFlag, ref)
10481052
case ref =>
10491053
val init = Assign(ref, Ident(sym.firstParam))
1050-
val getter = sym.getter(clazz)
10511054

10521055
if (!needsInitFlag(getter)) init
1053-
else Block(init, mkSetFlag(clazz, fieldOffset(getter), getter, bitmapKind(getter)), UNIT)
1056+
else Block(init, setInitFlag, UNIT)
10541057
}
10551058
}
10561059
else if (needsInitFlag(sym))

test/files/run/t8570.flags

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
-Xcheckinit

test/files/run/t8570.scala

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
trait Trait40_1 {
2+
val value37_2 = ()
3+
def run = { value37_2 }
4+
}
5+
6+
object Test {
7+
def main(args: Array[String]) {
8+
(new Trait40_1 {}).run
9+
}
10+
}

test/files/run/t8570a.check

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
()

test/files/run/t8570a.flags

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
-Xcheckinit

test/files/run/t8570a.scala

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
trait Trait40_1 {
2+
val value37_2 = ()
3+
def run = { value37_2 }
4+
}
5+
6+
trait T1 extends Trait40_1 {
7+
override val value37_2 = ()
8+
}
9+
10+
object Test {
11+
def main(args: Array[String]) {
12+
println((new T1 {}).run)
13+
}
14+
}

0 commit comments

Comments
 (0)