summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdriaan Moors <adriaan.moors@typesafe.com>2013-09-24 12:55:38 -0700
committerAdriaan Moors <adriaan.moors@typesafe.com>2013-09-24 12:55:38 -0700
commitbda48577d022811be58ce2b7f9e46890543ad45b (patch)
tree3c607afd72ad08ddf37895a799a5c3bb51ac38ff
parentc9fdcec4577932d001a865a7f6606c6e59f58cd3 (diff)
parentfa271e24342831bb6d7b683fddd1a4a11825d39d (diff)
downloadscala-bda48577d022811be58ce2b7f9e46890543ad45b.tar.gz
scala-bda48577d022811be58ce2b7f9e46890543ad45b.tar.bz2
scala-bda48577d022811be58ce2b7f9e46890543ad45b.zip
Merge pull request #2982 from retronym/topic/checkinit
SI-4742 Make -Xcheckinit aware of constants.
-rw-r--r--src/compiler/scala/tools/nsc/transform/Mixin.scala1
-rw-r--r--test/files/run/t4742.flags1
-rw-r--r--test/files/run/t4742.scala7
3 files changed, 9 insertions, 0 deletions
diff --git a/src/compiler/scala/tools/nsc/transform/Mixin.scala b/src/compiler/scala/tools/nsc/transform/Mixin.scala
index 7b545be07e..4eb8eb933c 100644
--- a/src/compiler/scala/tools/nsc/transform/Mixin.scala
+++ b/src/compiler/scala/tools/nsc/transform/Mixin.scala
@@ -89,6 +89,7 @@ abstract class Mixin extends InfoTransform with ast.TreeDSL {
settings.checkInit
&& sym.isGetter
&& !sym.isInitializedToDefault
+ && !isConstantType(sym.info.finalResultType) // SI-4742
&& !sym.hasFlag(PARAMACCESSOR | SPECIALIZED | LAZY)
&& !sym.accessed.hasFlag(PRESUPER)
&& !sym.isOuterAccessor
diff --git a/test/files/run/t4742.flags b/test/files/run/t4742.flags
new file mode 100644
index 0000000000..ae08446055
--- /dev/null
+++ b/test/files/run/t4742.flags
@@ -0,0 +1 @@
+-Xcheckinit \ No newline at end of file
diff --git a/test/files/run/t4742.scala b/test/files/run/t4742.scala
new file mode 100644
index 0000000000..3b42c0c120
--- /dev/null
+++ b/test/files/run/t4742.scala
@@ -0,0 +1,7 @@
+trait T { val x: Int = 0 }
+object O extends T { override final val x = 1 }
+
+object Test extends App {
+ // was throwing an UnitializedFieldError as constant 1 is folded into the accessor
+ assert((O: T).x == 1)
+}