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