From c0893ec0e1dc23842dd2d478320beb1d9706ab8b Mon Sep 17 00:00:00 2001 From: Andrew Pinski Date: Mon, 1 Jan 2007 14:19:58 -0800 Subject: [PATCH] re PR middle-end/30253 (ICE with statement expression inside a conditional) 2007-01-01 Andrew Pinski PR middle-end/30253 * gimplify (voidify_wrapper_expr): Update for GIMPLIFY_MODIFY_STMT. 2007-01-01 Andrew Pinski PR middle-end/30253 * gcc.c-torture/compile/statement-expression-1.c: New test. From-SVN: r120321 --- gcc/ChangeLog | 6 ++++++ gcc/gimplify.c | 3 ++- gcc/testsuite/ChangeLog | 5 +++++ .../gcc.c-torture/compile/statement-expression-1.c | 10 ++++++++++ 4 files changed, 23 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gcc.c-torture/compile/statement-expression-1.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 4b9e5ff975a..55ae03bf3a1 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2007-01-01 Andrew Pinski + + PR middle-end/30253 + * gimplify (voidify_wrapper_expr): Update for + GIMPLIFY_MODIFY_STMT. + 2007-01-01 Andreas Schwab PR target/29166 diff --git a/gcc/gimplify.c b/gcc/gimplify.c index 5df8579913a..01772bd5b02 100644 --- a/gcc/gimplify.c +++ b/gcc/gimplify.c @@ -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 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 78092410a68..ea08e48e492 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2007-01-01 Andrew Pinski + + PR middle-end/30253 + * gcc.c-torture/compile/statement-expression-1.c: New test. + 2007-01-01 Andreas Schwab 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 index 00000000000..fb4860256ad --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/statement-expression-1.c @@ -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); +} +