diff options
-rw-r--r-- | src/compiler/scala/tools/nsc/transform/Mixin.scala | 9 | ||||
-rw-r--r-- | test/files/run/t8570.flags | 1 | ||||
-rw-r--r-- | test/files/run/t8570.scala | 10 | ||||
-rw-r--r-- | test/files/run/t8570a.check | 1 | ||||
-rw-r--r-- | test/files/run/t8570a.flags | 1 | ||||
-rw-r--r-- | test/files/run/t8570a.scala | 14 |
6 files changed, 33 insertions, 3 deletions
diff --git a/src/compiler/scala/tools/nsc/transform/Mixin.scala b/src/compiler/scala/tools/nsc/transform/Mixin.scala index 673bc04bd9..9c9008bfcc 100644 --- a/src/compiler/scala/tools/nsc/transform/Mixin.scala +++ b/src/compiler/scala/tools/nsc/transform/Mixin.scala @@ -1042,15 +1042,18 @@ abstract class Mixin extends InfoTransform with ast.TreeDSL { // add accessor definitions addDefDef(sym, { if (sym.isSetter) { + val getter = sym.getter(clazz) + def setInitFlag = mkSetFlag(clazz, fieldOffset(getter), getter, bitmapKind(getter)) if (isOverriddenSetter(sym)) UNIT else accessedRef match { - case ref @ Literal(_) => ref + case ref @ Literal(_) => + if (!needsInitFlag(getter)) ref + else Block(setInitFlag, ref) case ref => val init = Assign(ref, Ident(sym.firstParam)) - val getter = sym.getter(clazz) if (!needsInitFlag(getter)) init - else Block(init, mkSetFlag(clazz, fieldOffset(getter), getter, bitmapKind(getter)), UNIT) + else Block(init, setInitFlag, UNIT) } } else if (needsInitFlag(sym)) diff --git a/test/files/run/t8570.flags b/test/files/run/t8570.flags new file mode 100644 index 0000000000..3d1ee4760a --- /dev/null +++ b/test/files/run/t8570.flags @@ -0,0 +1 @@ +-Xcheckinit diff --git a/test/files/run/t8570.scala b/test/files/run/t8570.scala new file mode 100644 index 0000000000..bbe83e9080 --- /dev/null +++ b/test/files/run/t8570.scala @@ -0,0 +1,10 @@ +trait Trait40_1 { + val value37_2 = () + def run = { value37_2 } +} + +object Test { + def main(args: Array[String]) { + (new Trait40_1 {}).run + } +} diff --git a/test/files/run/t8570a.check b/test/files/run/t8570a.check new file mode 100644 index 0000000000..6a452c185a --- /dev/null +++ b/test/files/run/t8570a.check @@ -0,0 +1 @@ +() diff --git a/test/files/run/t8570a.flags b/test/files/run/t8570a.flags new file mode 100644 index 0000000000..3d1ee4760a --- /dev/null +++ b/test/files/run/t8570a.flags @@ -0,0 +1 @@ +-Xcheckinit diff --git a/test/files/run/t8570a.scala b/test/files/run/t8570a.scala new file mode 100644 index 0000000000..ef116e2a8a --- /dev/null +++ b/test/files/run/t8570a.scala @@ -0,0 +1,14 @@ +trait Trait40_1 { + val value37_2 = () + def run = { value37_2 } +} + +trait T1 extends Trait40_1 { + override val value37_2 = () +} + +object Test { + def main(args: Array[String]) { + println((new T1 {}).run) + } +} |