[cfe-dev] [Bug] Wrong Exception Handling : Destructor not called immediately
Halfdan Ingvarsson
halfdan at sidefx.com
Fri Apr 4 11:55:21 PDT 2014
Possibly related to this: http://llvm.org/bugs/show_bug.cgi?id=14223
We still compile specific projects with -O1 to get around this issue.
- ½
On 14-04-04 12:39 PM, suyog sarda wrote:
> Gentle Ping !! Please help to verify if this is a bug and if my
> analysis is correct.
>
>
> On Tue, Apr 1, 2014 at 10:18 PM, suyog sarda <sardask01 at gmail.com
> <mailto:sardask01 at gmail.com>> wrote:
>
> Hi all,
>
> This is a test g++ test case for checking correct exception handling.
>
> /#ifdef __GXX_EXPERIMENTAL_CXX0X__
> #define NOEXCEPT_FALSE noexcept (false)
> #else
> #define NOEXCEPT_FALSE
> #endif
>
> extern "C" void abort ();
>
> int thrown;
>
> int as;
> struct a {
> a () { ++as; }
> ~a () NOEXCEPT_FALSE { --as; if (thrown++ == 0) throw 42; }
> };
>
> int f (a const&) { return 1; }
> int f (a const&, a const&) { return 1; }
>
> int bs;
> int as_sav;
> struct b {
> b (...) { ++bs; }
> ~b () { --bs; as_sav = as; }
> };
>
> bool p;
> void g()
> {
> if (p) throw 42;
> }
>
> int main () {
> thrown = 0;
> try {
> b tmp(f (a(), a()));
>
> g();
> }
> catch (...) {}
>
> // We throw when the first a is destroyed, which should destroy
> b before
> // the other a.
> if (as_sav != 1)
> abort ();
>
> thrown = 0;
> try {
> b tmp(f (a()));
>
> g();
> }
> catch (...) {}
>
> if (bs != 0)
> abort ();
> } /
>
> This Test Case aborts on ARM as well as X86 with clang latest
> trunk while with g++ no aborts are seen .
>
> Here, when first temporary object '/a'/ gets destroyed, its
> destructor is called where we throw an exception. This should
> immediately call destructor of /'b'/ and before calling
> constructor of second temporary object /'a'/. Instead, with clang,
> it is waiting for second temporary object /'a'/ to get destroyed
> and then calling its own destructor.
>
> In my opinion, the compiler is not generating correct landing pad
> for the exception. Can someone please help in validating this
> reason? If it is a genuine bug then i will file a bug and try to
> work out solution for it.
>
> --
> With regards,
> Suyog Sarda
>
>
>
>
> --
> With regards,
> Suyog Sarda
>
>
> _______________________________________________
> cfe-dev mailing list
> cfe-dev at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20140404/d17d04f9/attachment.html>
More information about the cfe-dev
mailing list