diff options
author | Richard Sandiford <rsandifo@redhat.com> | 2005-02-02 20:58:39 +0000 |
---|---|---|
committer | Richard Sandiford <rsandifo@gcc.gnu.org> | 2005-02-02 20:58:39 +0000 |
commit | 7ded35b4c2c8ebf53faa42987703616e2a813421 (patch) | |
tree | 8186ca6684edf68798355acd2929c8c432d3b55b /gcc/tree-flow-inline.h | |
parent | d01da8bd5ea37af2e5b6d382e489de7a73579a01 (diff) | |
download | gcc-7ded35b4c2c8ebf53faa42987703616e2a813421.zip gcc-7ded35b4c2c8ebf53faa42987703616e2a813421.tar.gz gcc-7ded35b4c2c8ebf53faa42987703616e2a813421.tar.bz2 |
re PR tree-optimization/19578 (function pointer propagation fails for noreturn functions (part 2))
PR tree-optimization/19578
* tree-flow.h (modified_noreturn_calls): Declare.
(noreturn_call_p): Declare.
* tree-flow-inline.h (noreturn_call_p): New function.
(modify_stmt): Add modified noreturn calls to modified_noreturn_calls.
* tree-cfg.c (modified_noreturn_calls): New variable.
(cleanup_control_flow): Use noreturn_call_p. Split basic blocks
that contain a mid-block noreturn call.
* tree-ssa.c (delete_tree_ssa): Clear modified_noreturn_calls.
From-SVN: r94610
Diffstat (limited to 'gcc/tree-flow-inline.h')
-rw-r--r-- | gcc/tree-flow-inline.h | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/gcc/tree-flow-inline.h b/gcc/tree-flow-inline.h index ef68888..7045053 100644 --- a/gcc/tree-flow-inline.h +++ b/gcc/tree-flow-inline.h @@ -131,6 +131,14 @@ get_filename (tree expr) return "???"; } +/* Return true if T is a noreturn call. */ +static inline bool +noreturn_call_p (tree t) +{ + tree call = get_call_expr_in (t); + return call != 0 && (call_expr_flags (call) & ECF_NORETURN) != 0; +} + /* Mark statement T as modified. */ static inline void modify_stmt (tree t) @@ -138,6 +146,8 @@ modify_stmt (tree t) stmt_ann_t ann = stmt_ann (t); if (ann == NULL) ann = create_stmt_ann (t); + else if (noreturn_call_p (t)) + VEC_safe_push (tree, modified_noreturn_calls, t); ann->modified = 1; } |