Commit 8595a07d by Jan Hubicka Committed by Jan Hubicka

Correct previous patch to not mark terminate as LEAF.

	* class.c (build_vtbl_initializer): Drop LEAF
	* decl.c (cxx_init_decl_processing): Likewise.
	(push_throw_library_fn): Likewise.
	* except.c (init_exception_processing): Likewise.
	(do_begin_catch): Likewise.
	(do_end_catch): Likewise.
	(do_allocate_exception): Likewise.

From-SVN: r202100
parent fafa0521
2013-08-29 Jan Hubicka <jh@suse.cz> 2013-08-29 Jan Hubicka <jh@suse.cz>
Correct previous patch to not mark terminate as LEAF.
* class.c (build_vtbl_initializer): Drop LEAF
* decl.c (cxx_init_decl_processing): Likewise.
(push_throw_library_fn): Likewise.
* except.c (init_exception_processing): Likewise.
(do_begin_catch): Likewise.
(do_end_catch): Likewise.
(do_allocate_exception): Likewise.
2013-08-29 Jan Hubicka <jh@suse.cz>
* class.c (build_vtbl_initializer): Make __cxa_deleted_virtual * class.c (build_vtbl_initializer): Make __cxa_deleted_virtual
ECF_NORETURN | ECF_LEAF ECF_NORETURN | ECF_LEAF
* cp-tree.h (build_library_fn_ptr, build_cp_library_fn_ptr, * cp-tree.h (build_library_fn_ptr, build_cp_library_fn_ptr,
......
...@@ -8873,7 +8873,7 @@ build_vtbl_initializer (tree binfo, ...@@ -8873,7 +8873,7 @@ build_vtbl_initializer (tree binfo,
if (!get_global_value_if_present (fn, &fn)) if (!get_global_value_if_present (fn, &fn))
fn = push_library_fn (fn, (build_function_type_list fn = push_library_fn (fn, (build_function_type_list
(void_type_node, NULL_TREE)), (void_type_node, NULL_TREE)),
NULL_TREE, ECF_NORETURN | ECF_LEAF); NULL_TREE, ECF_NORETURN);
if (!TARGET_VTABLE_USES_DESCRIPTORS) if (!TARGET_VTABLE_USES_DESCRIPTORS)
init = fold_convert (vfunc_ptr_type_node, init = fold_convert (vfunc_ptr_type_node,
build_fold_addr_expr (fn)); build_fold_addr_expr (fn));
......
...@@ -3816,7 +3816,7 @@ cxx_init_decl_processing (void) ...@@ -3816,7 +3816,7 @@ cxx_init_decl_processing (void)
abort_fndecl abort_fndecl
= build_library_fn_ptr ("__cxa_pure_virtual", void_ftype, = build_library_fn_ptr ("__cxa_pure_virtual", void_ftype,
ECF_NORETURN | ECF_NOTHROW | ECF_LEAF); ECF_NORETURN | ECF_NOTHROW);
/* Perform other language dependent initializations. */ /* Perform other language dependent initializations. */
init_class_processing (); init_class_processing ();
...@@ -4104,7 +4104,7 @@ push_void_library_fn (tree name, tree parmtypes, int ecf_flags) ...@@ -4104,7 +4104,7 @@ push_void_library_fn (tree name, tree parmtypes, int ecf_flags)
tree tree
push_throw_library_fn (tree name, tree type) push_throw_library_fn (tree name, tree type)
{ {
tree fn = push_library_fn (name, type, NULL_TREE, ECF_NORETURN | ECF_LEAF); tree fn = push_library_fn (name, type, NULL_TREE, ECF_NORETURN);
return fn; return fn;
} }
......
...@@ -58,8 +58,7 @@ init_exception_processing (void) ...@@ -58,8 +58,7 @@ init_exception_processing (void)
push_namespace (std_identifier); push_namespace (std_identifier);
tmp = build_function_type_list (void_type_node, NULL_TREE); tmp = build_function_type_list (void_type_node, NULL_TREE);
terminate_node = build_cp_library_fn_ptr ("terminate", tmp, terminate_node = build_cp_library_fn_ptr ("terminate", tmp,
ECF_NOTHROW | ECF_NORETURN ECF_NOTHROW | ECF_NORETURN);
| ECF_LEAF);
TREE_THIS_VOLATILE (terminate_node) = 1; TREE_THIS_VOLATILE (terminate_node) = 1;
TREE_NOTHROW (terminate_node) = 1; TREE_NOTHROW (terminate_node) = 1;
pop_namespace (); pop_namespace ();
...@@ -192,8 +191,7 @@ do_begin_catch (void) ...@@ -192,8 +191,7 @@ do_begin_catch (void)
if (!get_global_value_if_present (fn, &fn)) if (!get_global_value_if_present (fn, &fn))
{ {
/* Declare void* __cxa_begin_catch (void *) throw(). */ /* Declare void* __cxa_begin_catch (void *) throw(). */
fn = declare_library_fn (fn, ptr_type_node, ptr_type_node, fn = declare_library_fn (fn, ptr_type_node, ptr_type_node, ECF_NOTHROW);
ECF_NOTHROW | ECF_LEAF);
/* Create its transactional-memory equivalent. */ /* Create its transactional-memory equivalent. */
if (flag_tm) if (flag_tm)
...@@ -201,8 +199,7 @@ do_begin_catch (void) ...@@ -201,8 +199,7 @@ do_begin_catch (void)
tree fn2 = get_identifier ("_ITM_cxa_begin_catch"); tree fn2 = get_identifier ("_ITM_cxa_begin_catch");
if (!get_global_value_if_present (fn2, &fn2)) if (!get_global_value_if_present (fn2, &fn2))
fn2 = declare_library_fn (fn2, ptr_type_node, fn2 = declare_library_fn (fn2, ptr_type_node,
ptr_type_node, ptr_type_node, ECF_NOTHROW | ECF_TM_PURE);
ECF_NOTHROW | ECF_TM_PURE | ECF_LEAF);
record_tm_replacement (fn, fn2); record_tm_replacement (fn, fn2);
} }
} }
...@@ -242,15 +239,14 @@ do_end_catch (tree type) ...@@ -242,15 +239,14 @@ do_end_catch (tree type)
{ {
/* Declare void __cxa_end_catch (). /* Declare void __cxa_end_catch ().
This can throw if the destructor for the exception throws. */ This can throw if the destructor for the exception throws. */
fn = push_void_library_fn (fn, void_list_node, ECF_LEAF); fn = push_void_library_fn (fn, void_list_node, 0);
/* Create its transactional-memory equivalent. */ /* Create its transactional-memory equivalent. */
if (flag_tm) if (flag_tm)
{ {
tree fn2 = get_identifier ("_ITM_cxa_end_catch"); tree fn2 = get_identifier ("_ITM_cxa_end_catch");
if (!get_global_value_if_present (fn2, &fn2)) if (!get_global_value_if_present (fn2, &fn2))
fn2 = push_void_library_fn (fn2, void_list_node, fn2 = push_void_library_fn (fn2, void_list_node, ECF_TM_PURE);
ECF_TM_PURE | ECF_LEAF);
record_tm_replacement (fn, fn2); record_tm_replacement (fn, fn2);
} }
} }
...@@ -630,7 +626,7 @@ do_allocate_exception (tree type) ...@@ -630,7 +626,7 @@ do_allocate_exception (tree type)
{ {
/* Declare void *__cxa_allocate_exception(size_t) throw(). */ /* Declare void *__cxa_allocate_exception(size_t) throw(). */
fn = declare_library_fn (fn, ptr_type_node, size_type_node, fn = declare_library_fn (fn, ptr_type_node, size_type_node,
ECF_NOTHROW | ECF_MALLOC | ECF_LEAF); ECF_NOTHROW | ECF_MALLOC);
if (flag_tm) if (flag_tm)
{ {
...@@ -638,8 +634,7 @@ do_allocate_exception (tree type) ...@@ -638,8 +634,7 @@ do_allocate_exception (tree type)
if (!get_global_value_if_present (fn2, &fn2)) if (!get_global_value_if_present (fn2, &fn2))
fn2 = declare_library_fn (fn2, ptr_type_node, fn2 = declare_library_fn (fn2, ptr_type_node,
size_type_node, size_type_node,
ECF_NOTHROW | ECF_MALLOC | ECF_TM_PURE ECF_NOTHROW | ECF_MALLOC | ECF_TM_PURE);
| ECF_LEAF);
record_tm_replacement (fn, fn2); record_tm_replacement (fn, fn2);
} }
} }
......
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