Jochen,
Since it works with -Xint, it sounds like it could be a problem with the
generated compiled code. You may want to try reproduce with
-XX:+PrintCompilation and some other flags [1] to gather additional
information. I don't have access to a Windows 64-bit box right now, but I
wasn't able to recreate with 1.6.u13 64-bit on Mac OS X/Intel.
set JAVA_OPTS="-Xcomp -Xbatch -XX:+PrintCompilation
-XX:+ShowMessageBoxOnError"
groovy test.groovy
[1]: http://blogs.sun.com/watt/resource/jvm-options-list.html
- David Schlosnagle
On Tue, Jun 23, 2009 at 1:11 PM, Jochen Theodorou <[email protected]> wrote:
>
> Hi all,
>
> in Groovy we have now the second case of someone discovering a bug that
> seems to be not a groovy bug. It seems to happen only on windows with a
> 64bit environment. This makes it difficult to reproduce, since not many
> people bother with that it seems. So I am asking here for people to
> confirm the problem and maybe helping me to reducing the sample code.
>
> Anyway, the bug is reported with several 64bit VMs.. namely 1.6.0u13 and
> 1.6.0u11 or 12. A 32bit VM and the code works without problems. starting
> the program with -Xint and the problem goes away for 64bit too. Also
> Groovy 1.6.3 is required for this example, but I think any 1.6 Groovy
> will do... maybe even before. The sample is a groovy program:
>
> > def binstr = { v, n=4 ->
> > def s = ("0"*n + Integer.toBinaryString(v))
> > return s.substring(s.size()-n)
> > }
> >
> > def uniqcols = { a, b, cols=4 ->
> > def l = [] as HashSet
> > 0.upto(cols-1) { bitno ->
> > def bitmask = 1<<bitno
> > switch (bitno) {
> > case 0 : valu = ((a&bitmask) << 1) | (b&bitmask)
> > break
> > default : valu = ((a&bitmask) >> (bitno-1)) | ((b&bitmask) >>
> bitno)
> > break
> > }
> > l << valu // add value to set
> > }
> > // println l
> > return l.size()
> > }
> >
> > 3.upto(8) { n ->
> > def lastval = 2**n - 1
> > def spacefill = " "*(n+1)
> > def fmtstr = "%${n}d "
> > println "${fmtstr}"
> >
> > def File file = new File("k2m${n}.txt")
> > def PrintWriter writer = file.newPrintWriter()
> >
> > // heading
> > writer.print spacefill
> > 0.upto(lastval) { i -> writer.print "${binstr(i,n)} " };
> > writer.println ""
> >
> > // data lines
> > 0.upto(lastval) { i ->
> > writer.print "${binstr(i,n)} "
> > 0.upto(lastval) { j ->
> > writer.print String.format(fmtstr, n-uniqcols(i,j,n))
> > }
> > writer.println ""
> > }
> > writer.close() // files 3 to 5 empty without this!
> > }
>
>
> what fails is the String.format call, that deep down in Groovy will call
> a System.arraycopy, which then fails with a ArrayOutOfBoundsException,
> without any further explanation about what happened. A clear error
> message would have helped to identify the problem already, but VM error
> messages have never been very detailed.
>
> So anyway how can assist here?
>
> bye blackdrag
>
> --
> Jochen "blackdrag" Theodorou
> The Groovy Project Tech Lead (http://groovy.codehaus.org)
> http://blackdragsview.blogspot.com/
>
>
> >
>
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "JVM
Languages" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/jvm-languages?hl=en
-~----------~----~----~----~------~----~------~--~---