GCC EH unwinding bug and libjava calling std::terminate ()

Jan Hubicka <[email protected]>
Newsgroups gmane.comp.gcc.devel,gmane.comp.gcc.java.devel
Message-ID <[email protected]>
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
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.