Commit b8208297 by Jason Merrill

re PR c++/13944 (exception in constructor of a class to be thrown is not caught)

        PR c++/13944
        * except.c (do_free_exception): Remove #if 0 wrapper.
        (build_throw): Use it if we elide a copy into the exception object.

From-SVN: r78378
parent 896c3aa3
// PR c++/13944
// Bug: When eliding the copy from the A temporary into the exception
// object, we extended the throw prohibition to the constructor for the
// temporary. This is wrong; the throw from A() should propagate normally
// regardless of the elision of the temporary.
// { dg-do run }
struct A
{
A() { throw 0; }
};
int main()
{
try
{
throw A();
}
catch(int i)
{
return i;
}
catch (...)
{
return 2;
}
return 3;
}
// PR c++/13944
// Verify that we still call terminate() if we do run the copy constructor,
// and it throws.
// { dg-do run }
#include <cstdlib>
#include <exception>
struct A
{
A() { }
A(const A&) { throw 1; }
};
A a;
void
good_terminate() { std::exit (0); }
int main()
{
std::set_terminate (good_terminate);
try
{
throw a;
}
catch (...)
{
return 2;
}
return 3;
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment