diff options
author | Richard Biener <rguenther@suse.de> | 2022-09-07 12:01:34 +0200 |
---|---|---|
committer | Richard Biener <rguenther@suse.de> | 2022-09-08 16:05:17 +0200 |
commit | 78ef801b7263606d27a6a752a40cbeecc584fb3d (patch) | |
tree | b523e083051e0bed3f186cc7716ece05e98c280f /gcc/gimple.cc | |
parent | 4db3cb781c355341fa041e6b5bbbfc495c6a0fdb (diff) | |
download | gcc-78ef801b7263606d27a6a752a40cbeecc584fb3d.zip gcc-78ef801b7263606d27a6a752a40cbeecc584fb3d.tar.gz gcc-78ef801b7263606d27a6a752a40cbeecc584fb3d.tar.bz2 |
Fix some gimple_ctrl_altering_p mistakes
CFG cleanup resets the control altering flag for noreturn functions
when they are ECF_LEAF (like __builtin_unreachable ()). The
.ABNORMAL_DISPATCHER call built during CFG construction is not
marked as control altering. Several passes inserting traps or
unreachables fail to set the flag. And more.
PR middle-end/106870
* gimple-harden-conditionals.cc (insert_check_and_trap):
Set the control-altering flag on the built IFN_TRAP.
* gimple.cc (gimple_build_builtin_unreachable): Likewise.
* tree-cfg.cc (handle_abnormal_edges): Set the control-altering
flag on the .ABNORMAL_DISPATCHER call.
* tree-cfgcleanup.cc (cleanup_call_ctrl_altering_flag): Avoid
resetting the control altering flag for ECF_NORETURN calls.
(cleanup_control_flow_bb): Set the control altering flag on
discovered noreturn calls.
* symtab-thunks.cc (expand_thunk): Set the control altering
flag for the noreturn tailcall case.
* tree-eh.cc (lower_resx): Likewisw for trap and unwind_resume
calls.
Diffstat (limited to 'gcc/gimple.cc')
-rw-r--r-- | gcc/gimple.cc | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/gcc/gimple.cc b/gcc/gimple.cc index cd5ad0c..4d45311 100644 --- a/gcc/gimple.cc +++ b/gcc/gimple.cc @@ -440,6 +440,7 @@ gimple_build_builtin_unreachable (location_t loc) gcc_checking_assert (data == NULL_TREE); g = gimple_build_call_internal (IFN_TRAP, 0); } + gimple_call_set_ctrl_altering (g, true); gimple_set_location (g, loc); return g; } |