diff options
author | Zack Weinberg <zack@gcc.gnu.org> | 2004-11-23 19:55:24 +0000 |
---|---|---|
committer | Zack Weinberg <zack@gcc.gnu.org> | 2004-11-23 19:55:24 +0000 |
commit | 6e14af161c7d61b280c187b1a91a0fd853249bd1 (patch) | |
tree | 67f41f708633dc69a022149ee3dee19b259e910b /gcc/calls.c | |
parent | e9c00ceb85406d1f78d1752f27742ac7bb05b47b (diff) | |
download | gcc-6e14af161c7d61b280c187b1a91a0fd853249bd1.zip gcc-6e14af161c7d61b280c187b1a91a0fd853249bd1.tar.gz gcc-6e14af161c7d61b280c187b1a91a0fd853249bd1.tar.bz2 |
function.h (struct function): Remove calls_longjmp.
* function.h (struct function): Remove calls_longjmp.
(current_function_calls_longjmp): Delete.
* tree.h (ECF_LONGJMP): Delete.
(ECF_SIBCALL, ECF_PURE, ECF_SP_DEPRESSED, ECF_ALWAYS_RETURN)
(ECF_LIBCALL_BLOCK): Everybody slide down one.
(ECF_CONST, ECF_NORETURN, ECF_SIBCALL): Clarify comments.
* builtins.c (expand_builtin_longjmp): Don't set
current_function_calls_longjmp.
* calls.c (special_function_p): Mark longjmp and siglongjmp
with ECF_NORETURN, not ECF_LONGJMP.
(emit_call_1, expand_call, emit_library_call_value_1):
Don't check for ECF_LONGJMP.
* tree-cfg.c (make_exit_edges, is_ctrl_altering_stmt)
(need_fake_edge_p): Likewise.
* config/avr/avr.h, config/ip2k/ip2k.h: Don't define NON_SAVING_SETJMP.
* system.h: Poison NON_SAVING_SETJMP.
* function.c (use_register_for_decl)
* gcse.c (compute_hash_table_work, compute_store_table)
* postreload-gcse.c (record_opr_changes)
* reload.c (find_equiv_reg)
* reload1.c (reload)
* config/i386/i386.c (ix86_can_use_return_insn_p):
Remove code conditional on NON_SAVING_SETJMP.
* doc/tm.texi: Delete documentation of NON_SAVING_SETJMP.
* config/i386/sysv3.h: Delete file.
* config/i386/i386.c (ix86_svr3_asm_out_constructor): Delete.
From-SVN: r91101
Diffstat (limited to 'gcc/calls.c')
-rw-r--r-- | gcc/calls.c | 17 |
1 files changed, 7 insertions, 10 deletions
diff --git a/gcc/calls.c b/gcc/calls.c index 84d4435..44806d4c 100644 --- a/gcc/calls.c +++ b/gcc/calls.c @@ -435,7 +435,7 @@ emit_call_1 (rtx funexp, tree fntree, tree fndecl ATTRIBUTE_UNUSED, if (rounded_stack_size != 0) { - if (ecf_flags & (ECF_SP_DEPRESSED | ECF_NORETURN | ECF_LONGJMP)) + if (ecf_flags & (ECF_SP_DEPRESSED | ECF_NORETURN)) /* Just pretend we did the pop. */ stack_pointer_delta -= rounded_stack_size; else if (flag_defer_pop && inhibit_defer_pop == 0 @@ -525,7 +525,7 @@ special_function_p (tree fndecl, int flags) if (tname[1] == 'i' && ! strcmp (tname, "siglongjmp")) - flags |= ECF_LONGJMP; + flags |= ECF_NORETURN; } else if ((tname[0] == 'q' && tname[1] == 's' && ! strcmp (tname, "qsetjmp")) @@ -535,7 +535,7 @@ special_function_p (tree fndecl, int flags) else if (tname[0] == 'l' && tname[1] == 'o' && ! strcmp (tname, "longjmp")) - flags |= ECF_LONGJMP; + flags |= ECF_NORETURN; } return flags; @@ -2174,7 +2174,7 @@ expand_call (tree exp, rtx target, int ignore) || !targetm.function_ok_for_sibcall (fndecl, exp) /* Functions that do not return exactly once may not be sibcall optimized. */ - || (flags & (ECF_RETURNS_TWICE | ECF_LONGJMP | ECF_NORETURN)) + || (flags & (ECF_RETURNS_TWICE | ECF_NORETURN)) || TYPE_VOLATILE (TREE_TYPE (TREE_TYPE (addr))) /* If the called function is nested in the current one, it might access some of the caller's arguments, but could clobber them beforehand if @@ -2753,7 +2753,7 @@ expand_call (tree exp, rtx target, int ignore) if nonvolatile values are live. For functions that cannot return, inform flow that control does not fall through. */ - if ((flags & (ECF_NORETURN | ECF_LONGJMP)) || pass == 0) + if ((flags & ECF_NORETURN) || pass == 0) { /* The barrier must be emitted immediately after the CALL_INSN. Some ports emit more @@ -2779,9 +2779,6 @@ expand_call (tree exp, rtx target, int ignore) } } - if (flags & ECF_LONGJMP) - current_function_calls_longjmp = 1; - /* If value type not void, return an rtx for the value. */ if (TYPE_MODE (TREE_TYPE (exp)) == VOIDmode @@ -2979,7 +2976,7 @@ expand_call (tree exp, rtx target, int ignore) normal_call_insns = insns; /* Verify that we've deallocated all the stack we used. */ - gcc_assert ((flags & (ECF_NORETURN | ECF_LONGJMP)) + gcc_assert ((flags & ECF_NORETURN) || (old_stack_allocated == stack_pointer_delta - pending_stack_adjust)); } @@ -3694,7 +3691,7 @@ emit_library_call_value_1 (int retval, rtx orgfun, rtx value, if nonvolatile values are live. For functions that cannot return, inform flow that control does not fall through. */ - if (flags & (ECF_NORETURN | ECF_LONGJMP)) + if (flags & ECF_NORETURN) { /* The barrier note must be emitted immediately after the CALL_INSN. Some ports emit more than |