This page is no longer maintained — Please continue to the home page at www.scala-lang.org

Xcheckinit failures.

1 reply
extempore
Joined: 2008-12-17,
User offline. Last seen 35 weeks 3 days ago.

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)

Iulian Dragos 2
Joined: 2009-02-10,
User offline. Last seen 42 years 45 weeks ago.
Re: Xcheckinit failures.


On Wed, Apr 7, 2010 at 8:52 PM, Paul Phillips <paulp@improving.org> wrote:
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?

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 

./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.<init>(bug428.scala:5)
>       at Test$Bar.<init>(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.<init>(bug429.scala:5)
>       at Test$B.<init>(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.<init>(ArrayBuffer.scala:28)
>       at scala.collection.mutable.ArrayBuffer.<init>(ArrayBuffer.scala:40)
>       at Test$$anon$1.<init>(t1524.scala:3)
>       at Test$.<init>(t1524.scala:3)
>       at Test$.<clinit>(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$.<init>(existentials.scala:73)
>       at Test$.<clinit>(existentials.scala)
>       ... 13 more
partest: [...]/run/sequenceComparisons.scala            [ FAILED ]

5 of 5 tests failed (elapsed time: 00:00:08)

--
Paul Phillips      | It is hard to believe that a man is
Imperfectionist    | telling the truth when you know that you
Empiricist         | would lie if you were in his place.
i'll ship a pulp   |     -- H. L. Mencken



--
« Je déteste la montagne, ça cache le paysage »
Alphonse Allais

Copyright © 2012 École Polytechnique Fédérale de Lausanne (EPFL), Lausanne, Switzerland