[gcc r14-12792] gimplify: Allow declarations in recalculate_side_effects [PR126497]
Jakub Jelinek
jakub@gcc.gnu.org
Sat Aug 1 10:29:47 GMT 2026
https://gcc.gnu.org/g:bbe1892f92c5b76637a53c376e6ff7f8095ca851
commit r14-12792-gbbe1892f92c5b76637a53c376e6ff7f8095ca851
Author: Jakub Jelinek <jakub@redhat.com>
Date: Fri Jul 31 09:05:50 2026 +0200
gimplify: Allow declarations in recalculate_side_effects [PR126497]
The following testcase ICEs, because we decide to fold a comparison
into just one of its operands, we call recalculate_side_effects on that
and ICE on the assertion that it isn't called on anything unexpected
(here PARM_DECL).
Already some time ago we had to add an exception for SSA_NAME for the
same reason.
The tcc_declaration case is slightly different, TREE_SIDE_EFFECTS is
sometimes present on those if they are TREE_THIS_VOLATILE, but it is
something the FE should take care of when creating those decls, not
a business of the gimplifier.
2026-07-31 Jakub Jelinek <jakub@redhat.com>
PR middle-end/126497
* gimplify.cc (recalculate_side_effects): Return for
tcc_declaration.
* gcc.dg/bitint-141.c: New test.
Reviewed-by: Andrea Pinski <andrew.pinski@oss.qualcomm.com>
(cherry picked from commit ca867fd9d5ace4ede8289dba9ae731e554bde618)
Diff:
---
gcc/gimplify.cc | 7 +++++++
gcc/testsuite/gcc.dg/bitint-141.c | 19 +++++++++++++++++++
2 files changed, 26 insertions(+)
diff --git a/gcc/gimplify.cc b/gcc/gimplify.cc
index 7fdfbe25a8ae..6cc2d1299f04 100644
--- a/gcc/gimplify.cc
+++ b/gcc/gimplify.cc
@@ -3372,6 +3372,13 @@ recalculate_side_effects (tree t)
/* No side-effects. */
return;
+ case tcc_declaration:
+ /* These can have side-effects if TREE_THIS_VOLATILE,
+ but those should be set elsewhere, not in
+ recalculate_side_effects. Can be triggered e.g. if
+ a comparison is folded into one of its operands. */
+ return;
+
default:
if (code == SSA_NAME)
/* No side-effects. */
diff --git a/gcc/testsuite/gcc.dg/bitint-141.c b/gcc/testsuite/gcc.dg/bitint-141.c
new file mode 100644
index 000000000000..f3f22bbb0bf3
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/bitint-141.c
@@ -0,0 +1,19 @@
+/* PR middle-end/126497 */
+/* { dg-do compile { target bitint } } */
+/* { dg-options "-std=c23" } */
+
+typedef unsigned _BitInt (1) U;
+
+U
+foo (U a)
+{
+ U t = a >= 1uwb;
+ return t;
+}
+
+U
+bar (U a)
+{
+ U t = a == 1uwb;
+ return t;
+}
More information about the Gcc-cvs
mailing list