Hi, current mainline is buggy in EH unwinding effectivly ignoring MUST_NOT_THROW regions when reached via RESX from local handlers. See http://gcc.gnu.org/ml/gcc-patches/2009-03/msg01285.html for details.
Unfortunately this patch causes bootstrap failure when building libjava, because std::terminate() is now called. The call comes from run_proxy in natVMProxy.cc where we have cleanup code calling destructor of: _Jv_InterpFrame frame_desc (self->self, thread, proxyClass, NULL, frame_proxy); Now the desctuctor is pretty simple but because of: 'if a destructor called during stack unwinding exits with an exception, std::terminate is called' and because we use -fnon-call-excpetion and destructor is accessing memory, we keep MUST_NOT_THROW terminate () call accessible because after inlining the destructor, cleanup might unwind up to that MUST_NOT_THROW. Questio is how to fix this situation? Shall we link with C++ runtime, or use -fno-non-call-exceptions to build this file or somehow restruture code to avoid this case? Honza