diff --git a/src/dotty/runtime/LazyVals.scala b/src/dotty/runtime/LazyVals.scala index 38deec6f58ac..f09e96f57851 100644 --- a/src/dotty/runtime/LazyVals.scala +++ b/src/dotty/runtime/LazyVals.scala @@ -8,8 +8,8 @@ import scala.annotation.tailrec object LazyVals { private val unsafe = scala.concurrent.util.Unsafe.instance - final val BITS_PER_LAZY_VAL = 2 - final val LAZY_VAL_MASK = 3 + final val BITS_PER_LAZY_VAL = 2L + final val LAZY_VAL_MASK = 3L @inline def STATE(cur: Long, ord: Int) = (cur >> (ord * BITS_PER_LAZY_VAL)) & LAZY_VAL_MASK @inline def CAS(t: Object, offset: Long, e: Long, v: Int, ord: Int) = { diff --git a/src/dotty/tools/dotc/transform/LazyVals.scala b/src/dotty/tools/dotc/transform/LazyVals.scala index fbb4dd9b3c53..1efc0826b096 100644 --- a/src/dotty/tools/dotc/transform/LazyVals.scala +++ b/src/dotty/tools/dotc/transform/LazyVals.scala @@ -341,7 +341,7 @@ class LazyVals extends MiniPhaseTransform with IdentityDenotTransformer { // compute or create appropriate offsetSymol, bitmap and bits used by current ValDef appendOffsetDefs.get(companion.moduleClass) match { case Some(info) => - val flagsPerLong = 64 / dotty.runtime.LazyVals.BITS_PER_LAZY_VAL + val flagsPerLong = (64 / dotty.runtime.LazyVals.BITS_PER_LAZY_VAL).toInt info.ord += 1 ord = info.ord % flagsPerLong val id = info.ord / flagsPerLong diff --git a/tests/run/LazyValsLongs.scala b/tests/run/LazyValsLongs.scala new file mode 100644 index 000000000000..920a4b887b07 --- /dev/null +++ b/tests/run/LazyValsLongs.scala @@ -0,0 +1,65 @@ +class I { + object A1 + object A2 + object A3 + object A4 + object A5 + object A6 + object A7 + object A8 + object A9 + object A10 + object A11 + object A12 + object A13 + object A14 + object A15 + object A16 + object A17 + object A18 +} + +object Test { + def main(args: Array[String]): Unit = { + val c = new I + import c._ + val l1 = List(A1, + A2, + A3, + A4, + A5, + A6, + A7, + A8, + A9, + A10, + A11, + A12, + A13, + A14, + A15, + A16, + A17, + A18) + val l2 = List(A1, + A2, + A3, + A4, + A5, + A6, + A7, + A8, + A9, + A10, + A11, + A12, + A13, + A14, + A15, + A16, + A17, + A18) + assert(l1.mkString == l2.mkString) + assert(!l1.contains(null)) + } +}