Menu

#70 Janino 2.0.14 miscompiles local classes

closed-fixed
5
2004-12-06
2004-11-08
Anonymous
No

Attached is a local class that is silently miscompiled
by Janino 2.0.14. The compilation ends without an
error but running the resulting classes with Sun's JRE
1.4.2_04-b05 yields the following error:

Exception in thread "main" java.lang.ClassFormatError:
JaninoTest$1$BigIntComparator (Arguments can't fit into
locals)
at java.lang.ClassLoader.defineClass0(Native
Method)
at java.lang.ClassLoader.defineClass(Unknown
Source)
at
java.security.SecureClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.defineClass(Unknown
Source)
at java.net.URLClassLoader.access$100(Unknown
Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at
java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown
Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at
sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at
java.lang.ClassLoader.loadClassInternal(Unknown Source)
at JaninoTest.run(JaninoTest.java:36)
at JaninoTest.main(JaninoTest.java:55)

Discussion

  • Nobody/Anonymous

    example of a local class that Sun's JDK 1.4.2_04-b05 compiles correctly but Janino 2.0.14 miscompiles

     
  • Jos Hirth

    Jos Hirth - 2004-11-09

    Logged In: YES
    user_id=678669

    Ah this is how you ment it.. doh :)

     
  • Nobody/Anonymous

    Logged In: NO

    Further simplified test case showing the same error, this
    one is only 240 bytes:

    class O
    {
    void m()
    {
    class I
    {
    int v;
    I(int i) { v = i; }
    };

    new I(1);
    }

    public static void main(String [] args)
    {
    new O().m();
    }
    }

    When compiled with Janino 2.0.15 and run with Sun's JRE
    1.4.2_04-b05 on Debian:
    Exception in thread "main" java.lang.ClassFormatError: O$1$I
    (Arguments can't fit into locals)
    at java.lang.ClassLoader.defineClass0(Native Method)
    at
    java.lang.ClassLoader.defineClass(ClassLoader.java:537)
    at
    java.security.SecureClassLoader.defineClass(SecureClassLoader.java:123)
    at
    java.net.URLClassLoader.defineClass(URLClassLoader.java:251)
    at
    java.net.URLClassLoader.access$100(URLClassLoader.java:55)
    at
    java.net.URLClassLoader$1.run(URLClassLoader.java:194)
    at
    java.security.AccessController.doPrivileged(Native Method)
    at
    java.net.URLClassLoader.findClass(URLClassLoader.java:187)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:289)
    at
    sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:274)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:235)
    at
    java.lang.ClassLoader.loadClassInternal(ClassLoader.java:302)
    at O.m(O.java)
    at O.main(O.java)

     
  • Arno Unkrig

    Arno Unkrig - 2004-12-06

    Logged In: YES
    user_id=865893

    Forgot to define a synthetic "this$..." field in local
    classes declared in non-static methods.

    Will be fixed in 2.0.17.

     
  • Arno Unkrig

    Arno Unkrig - 2004-12-06
    • status: open --> closed-fixed
     

Log in to post a comment.

MongoDB Logo MongoDB