mirror of
https://gcc.gnu.org/git/gcc.git
synced 2024-12-22 10:35:22 +08:00
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[] = {
|
||||
{ 0, 0, false }, // construct [0]
|
||||
{ 1, 0, true }, // [1] = [0]
|
||||
{ 1, 0, false }, // [1] = [0]
|
||||
{ 0, 0, true }, // destruct [0]
|
||||
{ 2, 1, true }, // [2] = [1]
|
||||
{ 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>
|
||||
|
||||
* 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 ();
|
||||
}
|
||||
|
||||
// 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));
|
||||
|
||||
return (void *)((char *)ret + sizeof (__cxa_refcounted_exception));
|
||||
@ -191,12 +185,6 @@ __cxxabiv1::__cxa_allocate_dependent_exception() _GLIBCXX_NOTHROW
|
||||
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));
|
||||
|
||||
return ret;
|
||||
|
@ -62,6 +62,9 @@ __cxxabiv1::__cxa_throw (void *obj, std::type_info *tinfo,
|
||||
{
|
||||
PROBE2 (throw, obj, tinfo);
|
||||
|
||||
__cxa_eh_globals *globals = __cxa_get_globals ();
|
||||
globals->uncaughtExceptions += 1;
|
||||
|
||||
// Definitely a primary.
|
||||
__cxa_refcounted_exception *header
|
||||
= __get_refcounted_exception_header_from_obj (obj);
|
||||
|
Loading…
Reference in New Issue
Block a user