aboutsummaryrefslogtreecommitdiff
path: root/gcc/flow.c
diff options
context:
space:
mode:
authorRichard Henderson <rth@cygnus.com>2000-10-07 13:53:21 -0700
committerRichard Henderson <rth@gcc.gnu.org>2000-10-07 13:53:21 -0700
commit9a1ba437e83c401c742656a9b3dc6debf816409f (patch)
treee6c9280ad9279c2c012c17a733ade27da717cd96 /gcc/flow.c
parent9ab916b8ed43541ad87ded43671f473671370b0b (diff)
downloadgcc-9a1ba437e83c401c742656a9b3dc6debf816409f.zip
gcc-9a1ba437e83c401c742656a9b3dc6debf816409f.tar.gz
gcc-9a1ba437e83c401c742656a9b3dc6debf816409f.tar.bz2
calls.c (expand_call): Disallow sibcalls to noreturn functions.
* calls.c (expand_call): Disallow sibcalls to noreturn functions. * flow.c (make_edges): Revert last change. * config/alpha/alpha.h (FUNCTION_OK_FOR_SIBCALL): Don't test TREE_THIS_VOLATILE. * config/pa/pa.h (FUNCTION_OK_FOR_SIBCALL): Likewise. From-SVN: r36781
Diffstat (limited to 'gcc/flow.c')
-rw-r--r--gcc/flow.c10
1 files changed, 3 insertions, 7 deletions
diff --git a/gcc/flow.c b/gcc/flow.c
index 52eed8d..0cb8428 100644
--- a/gcc/flow.c
+++ b/gcc/flow.c
@@ -1152,12 +1152,8 @@ make_edges (label_value_list)
wouldn't have created the sibling call in the first place. */
if (code == CALL_INSN && SIBLING_CALL_P (insn))
- {
- if (! find_reg_note (insn, REG_NORETURN, NULL_RTX))
- make_edge (edge_cache, bb, EXIT_BLOCK_PTR,
- EDGE_ABNORMAL | EDGE_ABNORMAL_CALL);
- }
- else
+ make_edge (edge_cache, bb, EXIT_BLOCK_PTR,
+ EDGE_ABNORMAL | EDGE_ABNORMAL_CALL);
/* If this is a CALL_INSN, then mark it as reaching the active EH
handler for this CALL_INSN. If we're handling asynchronous
@@ -1165,7 +1161,7 @@ make_edges (label_value_list)
Also mark the CALL_INSN as reaching any nonlocal goto handler. */
- if (code == CALL_INSN || asynchronous_exceptions)
+ else if (code == CALL_INSN || asynchronous_exceptions)
{
/* Add any appropriate EH edges. We do this unconditionally
since there may be a REG_EH_REGION or REG_EH_RETHROW note