- About Scala
- Documentation
- Code Examples
- Software
- Scala Developers
Xcheckinit failures.
Wed, 2010-04-07, 19:52
There are 5 tests failing when run under -Xcheckinit. The nightly is
supposed to do that, but I think I broke it while working on partest.
However it's hard to explain that some of these failing tests haven't
changed in four years. So either Xcheckinit itself has changed (and
sometime since I caused partest to stop using the option) or the option
has never been passed along to test runs. I'm honestly not sure which.
Here is a command line which will run the five failing tests, and also
the output it produces. My question is, are these failures legit, or is
there something wrong with -Xcheckinit?
./test/partest --show-diff --scalacopts "-Xcheckinit" test/files/run/bug428.scala test/files/run/bug429.scala test/files/run/existentials.scala test/files/run/sequenceComparisons.scala test/files/run/t1524.scala
Started 5 workers with ~1 tests each.
partest: [...]/run/bug428.scala [ FAILED ]
partest: [...]/run/bug429.scala [ FAILED ]
1,8c1,21
< Foo 1: a = 0, b = 0, x = 0, y = 0
< Foo 2: a = 2, b = 0, x = 0, y = 0
< Foo 3: a = 2, b = 3, x = 0, y = 0
< Foo 4: a = 2, b = 3, x = 0, y = 0
< Foo 5: a = 2, b = 3, x = 0, y = 0
< Bar 1: a = 2, b = 3, x = 0, y = 0
< Bar 2: a = 2, b = 3, x = 5, y = 0
< Bar 3: a = 2, b = 3, x = 5, y = 7
---
> scala.UninitializedFieldError: Uninitialized field: bug428.scala: 6
> at Test$Foo.a(bug428.scala:6)
> at Test$Foo.toString(bug428.scala:18)
> at java.lang.String.valueOf(String.java:2826)
> at scala.collection.mutable.StringBuilder.append(StringBuilder.scala:252)
> at Test$Foo.(bug428.scala:5)
> at Test$Bar.(bug428.scala:22)
> at Test$.main(bug428.scala:33)
> at Test.main(bug428.scala)
> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
> at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
> at java.lang.reflect.Method.invoke(Method.java:597)
> at scala.tools.nsc.util.ScalaClassLoader$$anonfun$run$1.apply(ScalaClassLoader.scala:81)
> at scala.tools.nsc.util.ScalaClassLoader$class.asContext(ScalaClassLoader.scala:24)
> at scala.tools.nsc.util.ScalaClassLoader$URLClassLoader.asContext(ScalaClassLoader.scala:86)
> at scala.tools.nsc.util.ScalaClassLoader$class.run(ScalaClassLoader.scala:81)
> at scala.tools.nsc.util.ScalaClassLoader$URLClassLoader.run(ScalaClassLoader.scala:86)
> at scala.tools.nsc.ObjectRunner$.run(ObjectRunner.scala:32)
> at scala.tools.nsc.MainGenericRunner$.main(MainGenericRunner.scala:78)
> at scala.tools.nsc.MainGenericRunner.main(MainGenericRunner.scala)
1c1,18
< AyB1
---
> Ayscala.UninitializedFieldError: Uninitialized field: bug429.scala: 10
> at Test$B.x(bug429.scala:10)
> at Test$A.(bug429.scala:5)
> at Test$B.(bug429.scala:7)
> at Test$.main(bug429.scala:13)
> at Test.main(bug429.scala)
> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
> at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
> at java.lang.reflect.Method.invoke(Method.java:597)
> at scala.tools.nsc.util.ScalaClassLoader$$anonfun$run$1.apply(ScalaClassLoader.scala:81)
> at scala.tools.nsc.util.ScalaClassLoader$class.asContext(ScalaClassLoader.scala:24)
> at scala.tools.nsc.util.ScalaClassLoader$URLClassLoader.asContext(ScalaClassLoader.scala:86)
> at scala.tools.nsc.util.ScalaClassLoader$class.run(ScalaClassLoader.scala:81)
> at scala.tools.nsc.util.ScalaClassLoader$URLClassLoader.run(ScalaClassLoader.scala:86)
> at scala.tools.nsc.ObjectRunner$.run(ObjectRunner.scala:32)
> at scala.tools.nsc.MainGenericRunner$.main(MainGenericRunner.scala:78)
> at scala.tools.nsc.MainGenericRunner.main(MainGenericRunner.scala)
partest: [...]/run/t1524.scala [ FAILED ]
1c1,23
< initial
---
> java.lang.ExceptionInInitializerError
> at Test.main(t1524.scala)
> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
> at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
> at java.lang.reflect.Method.invoke(Method.java:597)
> at scala.tools.nsc.util.ScalaClassLoader$$anonfun$run$1.apply(ScalaClassLoader.scala:81)
> at scala.tools.nsc.util.ScalaClassLoader$class.asContext(ScalaClassLoader.scala:24)
> at scala.tools.nsc.util.ScalaClassLoader$URLClassLoader.asContext(ScalaClassLoader.scala:86)
> at scala.tools.nsc.util.ScalaClassLoader$class.run(ScalaClassLoader.scala:81)
> at scala.tools.nsc.util.ScalaClassLoader$URLClassLoader.run(ScalaClassLoader.scala:86)
> at scala.tools.nsc.ObjectRunner$.run(ObjectRunner.scala:32)
> at scala.tools.nsc.MainGenericRunner$.main(MainGenericRunner.scala:78)
> at scala.tools.nsc.MainGenericRunner.main(MainGenericRunner.scala)
> Caused by: scala.UninitializedFieldError: Uninitialized field: t1524.scala: 3
> at Test$$anon$1.initialSize(t1524.scala:3)
> at scala.collection.mutable.ResizableArray$class.$init$(ResizableArray.scala:32)
> at scala.collection.mutable.ArrayBuffer.(ArrayBuffer.scala:28)
> at scala.collection.mutable.ArrayBuffer.(ArrayBuffer.scala:40)
> at Test$$anon$1.(t1524.scala:3)
> at Test$.(t1524.scala:3)
> at Test$.(t1524.scala)
> ... 13 more
partest: [...]/run/existentials.scala [ FAILED ]
1,6c1,19
< Int 2
< Float 2
< Int 2
< Float 2
< Cell(abc)
< Cell(abc)
---
> java.lang.ExceptionInInitializerError
> at Test.main(existentials.scala)
> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
> at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
> at java.lang.reflect.Method.invoke(Method.java:597)
> at scala.tools.nsc.util.ScalaClassLoader$$anonfun$run$1.apply(ScalaClassLoader.scala:81)
> at scala.tools.nsc.util.ScalaClassLoader$class.asContext(ScalaClassLoader.scala:24)
> at scala.tools.nsc.util.ScalaClassLoader$URLClassLoader.asContext(ScalaClassLoader.scala:86)
> at scala.tools.nsc.util.ScalaClassLoader$class.run(ScalaClassLoader.scala:81)
> at scala.tools.nsc.util.ScalaClassLoader$URLClassLoader.run(ScalaClassLoader.scala:86)
> at scala.tools.nsc.ObjectRunner$.run(ObjectRunner.scala:32)
> at scala.tools.nsc.MainGenericRunner$.main(MainGenericRunner.scala:78)
> at scala.tools.nsc.MainGenericRunner.main(MainGenericRunner.scala)
> Caused by: scala.UninitializedFieldError: Uninitialized field: existentials.scala: 80
> at Test$.ci(existentials.scala:80)
> at Test$.(existentials.scala:73)
> at Test$.(existentials.scala)
> ... 13 more
partest: [...]/run/sequenceComparisons.scala [ FAILED ]
5 of 5 tests failed (elapsed time: 00:00:08)
On Wed, Apr 7, 2010 at 8:52 PM, Paul Phillips <paulp@improving.org> wrote:
My guess is '-Xcheckinit' was never passed. I just checked the last two failing tests, and they indeed seem to use uninitialized vals. -Xcheckinit was not changed in a long time (at least not by me, and I don't think anyone else worked on it).
We should just make the tests well-behaved. Test t1524 shows a good catch: to set the initial size of an ArrayBuffer, one cannot override initialSize as a val (it has to be a lazy val).
cheers,iulian
--
« Je déteste la montagne, ça cache le paysage »
Alphonse Allais