aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorAndrew Pinski <apinski@marvell.com>2021-10-23 19:24:43 +0000
committerAndrew Pinski <apinski@marvell.com>2021-10-25 12:08:37 +0000
commit7518e4c2f0758daac5d650d400565cf49ac3c8c5 (patch)
treeceaf55f2846cfd5cb6bebfc0c827012b460a58b6 /gcc
parent0b028fb4989c2bdfaf474b4493c5926fb40da3c3 (diff)
downloadgcc-7518e4c2f0758daac5d650d400565cf49ac3c8c5.zip
gcc-7518e4c2f0758daac5d650d400565cf49ac3c8c5.tar.gz
gcc-7518e4c2f0758daac5d650d400565cf49ac3c8c5.tar.bz2
Fix PR 102908: wrongly removing null pointer loads
Just like PR 100382, here we have a DCE removing a null pointer load which is needed still. In this case, execute_fixup_cfg removes a store (correctly) and then removes the null load (incorrectly) due to not checking stmt_unremovable_because_of_non_call_eh_p. This patch adds the check in the similar way as the patch to fix PR 100382 did. gcc/ChangeLog: * tree-ssa-dce.c (simple_dce_from_worklist): Check stmt_unremovable_because_of_non_call_eh_p also before removing the statement.
Diffstat (limited to 'gcc')
-rw-r--r--gcc/tree-ssa-dce.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/gcc/tree-ssa-dce.c b/gcc/tree-ssa-dce.c
index 372e069..1281e67 100644
--- a/gcc/tree-ssa-dce.c
+++ b/gcc/tree-ssa-dce.c
@@ -1828,6 +1828,11 @@ simple_dce_from_worklist (bitmap worklist)
if (gimple_has_side_effects (t))
continue;
+ /* Don't remove statements that are needed for non-call
+ eh to work. */
+ if (stmt_unremovable_because_of_non_call_eh_p (cfun, t))
+ continue;
+
/* Add uses to the worklist. */
ssa_op_iter iter;
use_operand_p use_p;