aboutsummaryrefslogtreecommitdiff
path: root/gcc/gimplify.cc
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2024-01-08 13:59:15 +0100
committerJakub Jelinek <jakub@redhat.com>2024-01-08 13:59:15 +0100
commit8c0dd8a6ff85d6e7b38957f2da400f5cfa8fef6b (patch)
treed0941665a5557310d80e4e5d5dcdb906d540fc69 /gcc/gimplify.cc
parentefef8d7ff43c6c489fd6e7c52d71494d21324c87 (diff)
downloadgcc-8c0dd8a6ff85d6e7b38957f2da400f5cfa8fef6b.zip
gcc-8c0dd8a6ff85d6e7b38957f2da400f5cfa8fef6b.tar.gz
gcc-8c0dd8a6ff85d6e7b38957f2da400f5cfa8fef6b.tar.bz2
gimplify: Fix ICE in recalculate_side_effects [PR113228]
The following testcase ICEs during regimplificatgion since the addition of (convert (eqne zero_one_valued_p@0 INTEGER_CST@1)) simplification. That simplification is novel in the sense that in gimplify_expr it can turn an expression (comparison in particular) into a SSA_NAME. Normally when gimplify_expr sees originally a SSA_NAME, it does case SSA_NAME: /* Allow callbacks into the gimplifier during optimization. */ ret = GS_ALL_DONE; break; and doesn't try to recalculate side effects because of that, but in this case gimplify_expr normally enters the: default: switch (TREE_CODE_CLASS (TREE_CODE (*expr_p))) { case tcc_comparison: then does *expr_p = gimple_boolify (*expr_p); and then *expr_p = fold_convert_loc (input_location, org_type, *expr_p); with this new match.pd simplification turns that tcc_comparison class into SSA_NAME. Unlike the outer SSA_NAME handling though, this falls through into recalculate_side_effects (*expr_p); dont_recalculate: break; but unfortunately recalculate_side_effects doesn't handle SSA_NAME and ICEs on it. SSA_NAMEs don't ever have TREE_SIDE_EFFECTS set on those, so the following patch fixes it by handling it similarly to the tcc_constant case. 2024-01-08 Jakub Jelinek <jakub@redhat.com> PR tree-optimization/113228 * gimplify.cc (recalculate_side_effects): Do nothing for SSA_NAMEs. * gcc.c-torture/compile/pr113228.c: New test.
Diffstat (limited to 'gcc/gimplify.cc')
-rw-r--r--gcc/gimplify.cc3
1 files changed, 3 insertions, 0 deletions
diff --git a/gcc/gimplify.cc b/gcc/gimplify.cc
index 15b5406..4ed7a07 100644
--- a/gcc/gimplify.cc
+++ b/gcc/gimplify.cc
@@ -3344,6 +3344,9 @@ recalculate_side_effects (tree t)
return;
default:
+ if (code == SSA_NAME)
+ /* No side-effects. */
+ return;
gcc_unreachable ();
}
}