Core DR 475 PR c++/41174 PR c++/59224
Core DR 475 PR c++/41174 PR c++/59224 * libsupc++/eh_throw.cc (__cxa_throw): Set uncaughtExceptions. * libsupc++/eh_alloc.cc (__cxa_allocate_dependent_exception) (__cxa_allocate_exception): Don't set it here. From-SVN: r207129
This commit is contained in:
parent
c6f6157a45
commit
ccc2e73ce7
@ -13,7 +13,7 @@ struct Check {
|
|||||||
|
|
||||||
static Check const data[] = {
|
static Check const data[] = {
|
||||||
{ 0, 0, false }, // construct [0]
|
{ 0, 0, false }, // construct [0]
|
||||||
{ 1, 0, true }, // [1] = [0]
|
{ 1, 0, false }, // [1] = [0]
|
||||||
{ 0, 0, true }, // destruct [0]
|
{ 0, 0, true }, // destruct [0]
|
||||||
{ 2, 1, true }, // [2] = [1]
|
{ 2, 1, true }, // [2] = [1]
|
||||||
{ 2, 2, true }, // destruct [2]
|
{ 2, 2, true }, // destruct [2]
|
||||||
|
29
gcc/testsuite/g++.dg/eh/uncaught4.C
Normal file
29
gcc/testsuite/g++.dg/eh/uncaught4.C
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
// PR c++/41174
|
||||||
|
// { dg-do run }
|
||||||
|
|
||||||
|
#include <exception>
|
||||||
|
|
||||||
|
#define assert(E) if (!(E)) __builtin_abort();
|
||||||
|
|
||||||
|
struct e {
|
||||||
|
e()
|
||||||
|
{
|
||||||
|
assert( !std::uncaught_exception() );
|
||||||
|
try {
|
||||||
|
throw 1;
|
||||||
|
} catch (int i) {
|
||||||
|
assert( !std::uncaught_exception() );
|
||||||
|
throw;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
try {
|
||||||
|
throw e();
|
||||||
|
} catch (int i) {
|
||||||
|
assert( !std::uncaught_exception() );
|
||||||
|
}
|
||||||
|
assert( !std::uncaught_exception() );
|
||||||
|
}
|
@ -1,3 +1,12 @@
|
|||||||
|
2014-01-27 Jason Merrill <jason@redhat.com>
|
||||||
|
|
||||||
|
Core DR 475
|
||||||
|
PR c++/41174
|
||||||
|
PR c++/59224
|
||||||
|
* libsupc++/eh_throw.cc (__cxa_throw): Set uncaughtExceptions.
|
||||||
|
* libsupc++/eh_alloc.cc (__cxa_allocate_dependent_exception)
|
||||||
|
(__cxa_allocate_exception): Don't set it here.
|
||||||
|
|
||||||
2014-01-26 Jonathan Wakely <jwakely@redhat.com>
|
2014-01-26 Jonathan Wakely <jwakely@redhat.com>
|
||||||
|
|
||||||
* include/bits/stl_map.h: Remove anachronistic comment.
|
* include/bits/stl_map.h: Remove anachronistic comment.
|
||||||
|
@ -129,12 +129,6 @@ __cxxabiv1::__cxa_allocate_exception(std::size_t thrown_size) _GLIBCXX_NOTHROW
|
|||||||
std::terminate ();
|
std::terminate ();
|
||||||
}
|
}
|
||||||
|
|
||||||
// We have an uncaught exception as soon as we allocate memory. This
|
|
||||||
// yields uncaught_exception() true during the copy-constructor that
|
|
||||||
// initializes the exception object. See Issue 475.
|
|
||||||
__cxa_eh_globals *globals = __cxa_get_globals ();
|
|
||||||
globals->uncaughtExceptions += 1;
|
|
||||||
|
|
||||||
memset (ret, 0, sizeof (__cxa_refcounted_exception));
|
memset (ret, 0, sizeof (__cxa_refcounted_exception));
|
||||||
|
|
||||||
return (void *)((char *)ret + sizeof (__cxa_refcounted_exception));
|
return (void *)((char *)ret + sizeof (__cxa_refcounted_exception));
|
||||||
@ -191,12 +185,6 @@ __cxxabiv1::__cxa_allocate_dependent_exception() _GLIBCXX_NOTHROW
|
|||||||
std::terminate ();
|
std::terminate ();
|
||||||
}
|
}
|
||||||
|
|
||||||
// We have an uncaught exception as soon as we allocate memory. This
|
|
||||||
// yields uncaught_exception() true during the copy-constructor that
|
|
||||||
// initializes the exception object. See Issue 475.
|
|
||||||
__cxa_eh_globals *globals = __cxa_get_globals ();
|
|
||||||
globals->uncaughtExceptions += 1;
|
|
||||||
|
|
||||||
memset (ret, 0, sizeof (__cxa_dependent_exception));
|
memset (ret, 0, sizeof (__cxa_dependent_exception));
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
|
@ -62,6 +62,9 @@ __cxxabiv1::__cxa_throw (void *obj, std::type_info *tinfo,
|
|||||||
{
|
{
|
||||||
PROBE2 (throw, obj, tinfo);
|
PROBE2 (throw, obj, tinfo);
|
||||||
|
|
||||||
|
__cxa_eh_globals *globals = __cxa_get_globals ();
|
||||||
|
globals->uncaughtExceptions += 1;
|
||||||
|
|
||||||
// Definitely a primary.
|
// Definitely a primary.
|
||||||
__cxa_refcounted_exception *header
|
__cxa_refcounted_exception *header
|
||||||
= __get_refcounted_exception_header_from_obj (obj);
|
= __get_refcounted_exception_header_from_obj (obj);
|
||||||
|
Loading…
Reference in New Issue
Block a user