static tree do_end_catch (tree type) { tree fn, cleanup; fn = get_identifier ("__cxa_end_catch"); if (!get_global_value_if_present (fn, &fn)) { /* Declare void __cxa_end_catch (). This can throw if the destructor for the exception throws. */ fn = push_void_library_fn (fn, void_list_node, 0); /* Create its transactional-memory equivalent. */ if (flag_tm) { tree fn2 = get_identifier ("_ITM_cxa_end_catch"); if (!get_global_value_if_present (fn2, &fn2)) fn2 = push_void_library_fn (fn2, void_list_node, ECF_TM_PURE); record_tm_replacement (fn, fn2); } } cleanup = cp_build_function_call_vec (fn, NULL, tf_warning_or_error); TREE_NOTHROW (cleanup) = dtor_nothrow (type); return cleanup; }
static tree do_end_catch (tree type) { if (!end_catch_fn) /* Declare void __cxa_end_catch (). This can throw if the destructor for the exception throws. */ end_catch_fn = declare_library_fn ("__cxa_end_catch", void_type_node, NULL_TREE, 0, ECF_TM_PURE); tree cleanup = cp_build_function_call_vec (end_catch_fn, NULL, tf_warning_or_error); TREE_NOTHROW (cleanup) = dtor_nothrow (type); return cleanup; }
static tree do_end_catch (tree type) { tree fn, cleanup; fn = get_identifier ("__cxa_end_catch"); if (!get_global_value_if_present (fn, &fn)) { /* Declare void __cxa_end_catch (). */ fn = push_void_library_fn (fn, void_list_node); /* This can throw if the destructor for the exception throws. */ TREE_NOTHROW (fn) = 0; } cleanup = build_function_call (fn, NULL_TREE); TREE_NOTHROW (cleanup) = dtor_nothrow (type); return cleanup; }
static tree do_end_catch (tree type) { tree fn, cleanup; /* APPLE LOCAL begin radar 2848255 */ if (c_dialect_objc () && objc2_valid_objc_catch_type (type)) fn = get_identifier ("objc_end_catch"); else fn = get_identifier ("__cxa_end_catch"); /* APPLE LOCAL end radar 2848255 */ if (!get_global_value_if_present (fn, &fn)) { /* Declare void __cxa_end_catch (). */ fn = push_void_library_fn (fn, void_list_node); /* This can throw if the destructor for the exception throws. */ TREE_NOTHROW (fn) = 0; } cleanup = build_function_call (fn, NULL_TREE); TREE_NOTHROW (cleanup) = dtor_nothrow (type); return cleanup; }