]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR middle-end/30253 (ICE with statement expression inside a conditional)
authorAndrew Pinski <pinskia@gmail.com>
Mon, 1 Jan 2007 22:19:58 +0000 (14:19 -0800)
committerAndrew Pinski <pinskia@gcc.gnu.org>
Mon, 1 Jan 2007 22:19:58 +0000 (14:19 -0800)
2007-01-01  Andrew Pinski  <pinskia@gmail.com>

        PR middle-end/30253
        * gimplify (voidify_wrapper_expr): Update for
        GIMPLIFY_MODIFY_STMT.

2007-01-01  Andrew Pinski  <pinskia@gmail.com>

        PR middle-end/30253
        * gcc.c-torture/compile/statement-expression-1.c: New test.

From-SVN: r120321

gcc/ChangeLog
gcc/gimplify.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.c-torture/compile/statement-expression-1.c [new file with mode: 0644]

index 4b9e5ff975adc51f6d6d57b3e65538e664a95cbd..55ae03bf3a1f4b066efe9e4dafd3676afe5f1d5d 100644 (file)
@@ -1,3 +1,9 @@
+2007-01-01  Andrew Pinski  <pinskia@gmail.com>
+
+       PR middle-end/30253
+       * gimplify (voidify_wrapper_expr): Update for
+       GIMPLIFY_MODIFY_STMT.
+
 2007-01-01  Andreas Schwab  <schwab@suse.de>
 
        PR target/29166
index 5df8579913ac37c1c3c2eb9c2355464843923014..01772bd5b02414ce42c6fe7ce7b73525853ad18d 100644 (file)
@@ -1014,8 +1014,9 @@ voidify_wrapper_expr (tree wrapper, tree temp)
          /* The wrapper is on the RHS of an assignment that we're pushing
             down.  */
          gcc_assert (TREE_CODE (temp) == INIT_EXPR
+                     || TREE_CODE (temp) == GIMPLIFY_MODIFY_STMT
                      || TREE_CODE (temp) == MODIFY_EXPR);
-         TREE_OPERAND (temp, 1) = *p;
+         GENERIC_TREE_OPERAND (temp, 1) = *p;
          *p = temp;
        }
       else
index 78092410a68b173a00aeb03a7f985c3d34086a42..ea08e48e4921c080ec6d4c9c7d90e79c563c92cc 100644 (file)
@@ -1,3 +1,8 @@
+2007-01-01  Andrew Pinski  <pinskia@gmail.com>
+
+       PR middle-end/30253
+       * gcc.c-torture/compile/statement-expression-1.c: New test.
+
 2007-01-01  Andreas Schwab  <schwab@suse.de>
 
        PR target/29166
diff --git a/gcc/testsuite/gcc.c-torture/compile/statement-expression-1.c b/gcc/testsuite/gcc.c-torture/compile/statement-expression-1.c
new file mode 100644 (file)
index 0000000..fb48602
--- /dev/null
@@ -0,0 +1,10 @@
+/* PR middle-end/30253, We would ICE with statement expressions
+   in a conditional expression because we forgot to update the wrapper
+   function for the gimple modify statement.  */
+
+#define f(x) ({ unsigned tmp=x; tmp; })
+
+unsigned foo(unsigned x) {
+  return __builtin_constant_p(x) ? 0 : f(x);
+}
+