diff options
author | Jakub Jelinek <jakub@redhat.com> | 2018-12-16 00:51:31 +0100 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2018-12-16 00:51:31 +0100 |
commit | 784417d1f808ea70f013a90aeede3b20e6013e39 (patch) | |
tree | d5fb499587fc8a484ff6fc7e4c0565251f7971fb /libitm/eh_cpp.cc | |
parent | e310b38153d15c6d3ae9686eb38b6629f0f93393 (diff) | |
download | gcc-784417d1f808ea70f013a90aeede3b20e6013e39.tar.gz |
re PR c++/88482 (ICE when wrongly declaring __cxa_allocate_exception)
PR c++/88482
* except.c (verify_library_fn): New function.
(declare_library_fn): Use it. Initialize TM even if the non-TM
library function has been user declared.
(do_end_catch): Don't set TREE_NOTHROW on error_mark_node.
(expand_start_catch_block): Don't call initialize_handler_parm
for error_mark_node.
(build_throw): Use verify_library_fn. Initialize TM even if the
non-TM library function has been user declared. Don't crash if
any library fn is error_mark_node.
* g++.dg/eh/builtin5.C: New test.
* g++.dg/eh/builtin6.C: New test.
* g++.dg/eh/builtin7.C: New test.
* g++.dg/eh/builtin8.C: New test.
* g++.dg/eh/builtin9.C: New test.
* g++.dg/eh/builtin10.C: New test.
* g++.dg/eh/builtin11.C: New test.
* g++.dg/parse/crash55.C: Adjust expected diagnostics.
* eh_cpp.cc (__cxa_throw): Change DEST argument type from
void * to void (*) (void *).
(_ITM_cxa_throw): Likewise.
* libitm.h (_ITM_cxa_throw): Likewise.
* libitm.texi (_ITM_cxa_throw): Likewise.
From-SVN: r267179
Diffstat (limited to 'libitm/eh_cpp.cc')
-rw-r--r-- | libitm/eh_cpp.cc | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/libitm/eh_cpp.cc b/libitm/eh_cpp.cc index 7a6c37679b8..55b0c4e74fb 100644 --- a/libitm/eh_cpp.cc +++ b/libitm/eh_cpp.cc @@ -89,7 +89,7 @@ struct __cxa_eh_globals extern void *__cxa_allocate_exception (size_t) WEAK; extern void __cxa_free_exception (void *) WEAK; -extern void __cxa_throw (void *, void *, void *) WEAK; +extern void __cxa_throw (void *, void *, void (*) (void *)) WEAK; extern void *__cxa_begin_catch (void *) WEAK; extern void __cxa_end_catch (void) WEAK; extern void __cxa_tm_cleanup (void *, void *, unsigned int) WEAK; @@ -98,7 +98,7 @@ extern __cxa_eh_globals *__cxa_get_globals (void) WEAK; #if !defined (HAVE_ELF_STYLE_WEAKREF) void *__cxa_allocate_exception (size_t) { return NULL; } void __cxa_free_exception (void *) { return; } -void __cxa_throw (void *, void *, void *) { return; } +void __cxa_throw (void *, void *, void (*) (void *)) { return; } void *__cxa_begin_catch (void *) { return NULL; } void __cxa_end_catch (void) { return; } void __cxa_tm_cleanup (void *, void *, unsigned int) { return; } @@ -136,7 +136,7 @@ _ITM_cxa_free_exception (void *exc_ptr) } void -_ITM_cxa_throw (void *obj, void *tinfo, void *dest) +_ITM_cxa_throw (void *obj, void *tinfo, void (*dest) (void *)) { // This used to be instrumented, but does not need to be anymore. __cxa_throw (obj, tinfo, dest); |