With the test case I will attach, I get different behaviour if I compile it
first to bytecode *with ecj* and then natively compile it versus interpreting
the bytecode (I have also tried going directly from source to native and that's
the same behaviour as interpreted).

The error does not happen with bytecode generated by gcj -C or Sun's javac.

To duplicate (note:  javac == ecj in case 1 and Sun's javac in case 2)

1.

javac TestExceptionBug.java
gcj -fPIC -fjni -findirect-dispatch --main=TestExceptionBug -o TestExceptionBug
*.class
gcj -fPIC -fjni -findirect-dispatch --main=TestExceptionBug -o
nativeTestExceptionBug TestExceptionBug.java
echo "==== interpreted ===="; gij TestExceptionBug
echo "==== native (from source) ===="; ./nativeTestExceptionBug
echo "==== native (from bytecode) ===="; ./TestExceptionBug

Output:
==== interpreted ====
Finally! It's happened to me -- Ce Ce Penniston
Hi
==== native (from source) ====
Finally! It's happened to me -- Ce Ce Penniston
Hi
==== native (from bytecode) ====
Finally! It's happened to me -- Ce Ce Penniston
Exception in thread "main" TestExceptionBug$IndexedStoreException
   at TestExceptionBug.getIndex(java.lang.String) (Unknown Source)
   at TestExceptionBug.getIndex() (Unknown Source)
   at TestExceptionBug.main(java.lang.String[]) (Unknown Source)
   at gnu.java.lang.MainThread.call_main() (/usr/lib/libgcj.so.6.0.0)
   at gnu.java.lang.MainThread.run() (/usr/lib/libgcj.so.6.0.0)

2.

javac TestExceptionBug.java
gcj -fPIC -fjni -findirect-dispatch --main=TestExceptionBug -o TestExceptionBug
*.class
gcj -fPIC -fjni -findirect-dispatch --main=TestExceptionBug -o
nativeTestExceptionBug TestExceptionBug.java
echo "==== interpreted ===="; gij TestExceptionBug
echo "==== native (from source) ===="; ./nativeTestExceptionBug
echo "==== native (from bytecode) ===="; ./TestExceptionBug

Output:
==== interpreted ====
Finally! It's happened to me -- Ce Ce Penniston
Hi
==== native (from source) ====
Finally! It's happened to me -- Ce Ce Penniston
Hi
==== native (from bytecode) ====
Finally! It's happened to me -- Ce Ce Penniston
Hi

$ gcj --version
gcj (GCC) 4.0.0 20050402 (Red Hat 4.0.0-0.39)

$ javac -version
Eclipse Java Compiler 0.537, pre-3.1.0 milestone-5, Copyright IBM Corp 2000,
2005. All rights reserved.

-- 
           Summary: Bytecode -> native code doesn't handle exception
                    properly
           Product: gcc
           Version: 4.0.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P2
         Component: java
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: overholt at redhat dot com
                CC: gcc-bugs at gcc dot gnu dot org,java-prs at gcc dot gnu
                    dot org


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=20768

Reply via email to