diff options
-rw-r--r-- | src/compiler/scala/tools/nsc/backend/jvm/GenJVM.scala | 2 | ||||
-rw-r--r-- | test/files/run/t3569.check | 19 | ||||
-rw-r--r-- | test/files/run/t3569.scala | 22 |
3 files changed, 27 insertions, 16 deletions
diff --git a/src/compiler/scala/tools/nsc/backend/jvm/GenJVM.scala b/src/compiler/scala/tools/nsc/backend/jvm/GenJVM.scala index bb7edcfedd..694aa413cb 100644 --- a/src/compiler/scala/tools/nsc/backend/jvm/GenJVM.scala +++ b/src/compiler/scala/tools/nsc/backend/jvm/GenJVM.scala @@ -1905,7 +1905,7 @@ abstract class GenJVM extends SubComponent with GenJVMUtil with GenAndroid with ((sym.rawflags & (Flags.FINAL | Flags.MODULE)) != 0) && !sym.enclClass.isInterface && !sym.isClassConstructor - && (sym.isLazy || sym.isPrivate || !sym.isMutable) // fix for SI-3569, is it sufficient? + && !sym.isMutable // fix for SI-3569, it is too broad? ) mkFlags( diff --git a/test/files/run/t3569.check b/test/files/run/t3569.check index aa19916324..24cee4bf00 100644 --- a/test/files/run/t3569.check +++ b/test/files/run/t3569.check @@ -1,14 +1,17 @@ 1 -private final int Test$X.x2 -private final int Test$X.x3 -private final int Test$X.x5 -private final int Test$X.x6 -private final int Test$X.x7 -private int Test$X.x4 +private final int Test$X.val1 +private final int Test$X.val2 +private final int Test$X.val3 +private int Test$X.lval1 +private int Test$X.lval2 +private int Test$X.lval3 +private int Test$X.var1 +private int Test$X.var2 +private int Test$X.var3 private volatile int Test$X.bitmap$priv$0 public int Test$X.x public volatile int Test$X.bitmap$0 -private int Test$Y.z1 +public final int Test$Y.z1 +public final int Test$Y.z2 public int Test$Y.x public int Test$Y.y -public int Test$Y.z2 diff --git a/test/files/run/t3569.scala b/test/files/run/t3569.scala index e553f16ff8..4699aeaab3 100644 --- a/test/files/run/t3569.scala +++ b/test/files/run/t3569.scala @@ -1,15 +1,23 @@ object Test { + final val bippy1 = 1 + final lazy val bippy2 = 2 + lazy val lv = scala.util.Random.nextInt() class X(final var x: Int) { - final private[this] var x2: Int = 0 - final var x3: Int = 0 - private[this] var x4: Int = 0 - final private[this] var x5: Int = 0 - final lazy val x6: Int = 0 - final private[this] lazy val x7: Int = 0 + final var var1: Int = 0 + final private var var2: Int = 0 + final private[this] var var3: Int = 0 + + final val val1: Int = 1 + final private val val2: Int = 1 + final private[this] val val3: Int = 1 + + final lazy val lval1: Int = 2 + final private lazy val lval2: Int = 2 + final private[this] lazy val lval3: Int = 2 } - case class Y(final var x: Int, final private var y: Int, var z1: Int, private var z2: Int) { } + case class Y(final var x: Int, final private var y: Int, final val z1: Int, final private val z2: Int) { } def f = new X(0).x += 1 def main(args: Array[String]) { |