[PATCH] gimplify: Allow declarations in recalculate_side_effects [PR126497]

Jakub Jelinek <[email protected]>
Newsgroups gmane.comp.gcc.patches
Message-ID <amvAGnwG5hdeg56B@tucnak>
Hi!

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.

Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk/16.2?

2026-07-30  Jakub Jelinek  <[email protected]>

	PR middle-end/126497
	* gimplify.cc (recalculate_side_effects): Return for
	tcc_declaration.

	* gcc.dg/bitint-141.c: New test.

--- gcc/gimplify.cc.jj	2026-07-29 23:02:59.826913052 +0200
+++ gcc/gimplify.cc	2026-07-30 16:36:45.710098749 +0200
@@ -3361,6 +3361,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.  */
--- gcc/testsuite/gcc.dg/bitint-141.c.jj	2026-07-30 16:40:32.362324944 +0200
+++ gcc/testsuite/gcc.dg/bitint-141.c	2026-07-30 16:41:04.970925875 +0200
@@ -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;
+}

	Jakub
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.