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
-~----------~----~----~----~------~----~------~--~---

Reply via email to