From 9cb3832d7bed353cb522ffd3e74b1962cb91789a Mon Sep 17 00:00:00 2001 From: pinskia <pinskia@138bc75d-0d04-0410-961f-82ee72b054a4> Date: Thu, 3 Nov 2005 15:21:15 +0000 Subject: [PATCH] 2005-11-03 Andrew Pinski <pinskia@physics.uc.edu> PR middle-end/24589 * gimplify.c (gimplify_expr) <case CONSTRUCTOR>: Add the expressions to a statement list instead of gimplifying them. 2005-11-03 Andrew Pinski <pinskia@physics.uc.edu> PR middle-end/24589 * gcc.c-torture/execute/zero-struct-2.c: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@106436 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ChangeLog | 6 ++++++ gcc/gimplify.c | 11 +++++----- gcc/testsuite/ChangeLog | 5 +++++ .../gcc.c-torture/execute/zero-struct-2.c | 20 +++++++++++++++++++ 4 files changed, 37 insertions(+), 5 deletions(-) create mode 100644 gcc/testsuite/gcc.c-torture/execute/zero-struct-2.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 2e537361359f..e449baa16ecc 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2005-11-03 Andrew Pinski <pinskia@physics.uc.edu> + + PR middle-end/24589 + * gimplify.c (gimplify_expr) <case CONSTRUCTOR>: Add the + expressions to a statement list instead of gimplifying them. + 2005-11-03 Eric Botcazou <ebotcazou@libertysurf.fr> PR rtl-optimization/23585 diff --git a/gcc/gimplify.c b/gcc/gimplify.c index b7d891e041e4..52e70bdad5ea 100644 --- a/gcc/gimplify.c +++ b/gcc/gimplify.c @@ -4312,18 +4312,19 @@ gimplify_expr (tree *expr_p, tree *pre_p, tree *post_p, { unsigned HOST_WIDE_INT ix; constructor_elt *ce; + tree temp = NULL_TREE; for (ix = 0; VEC_iterate (constructor_elt, CONSTRUCTOR_ELTS (*expr_p), ix, ce); ix++) if (TREE_SIDE_EFFECTS (ce->value)) - gimplify_expr (&ce->value, pre_p, post_p, - gimple_test_f, fallback); + append_to_statement_list (ce->value, &temp); - *expr_p = NULL_TREE; + *expr_p = temp; + ret = GS_OK; } - - ret = GS_ALL_DONE; + else + ret = GS_ALL_DONE; break; /* The following are special cases that are not handled by the diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 82124c6a9d1c..ffb3ee094092 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2005-11-03 Andrew Pinski <pinskia@physics.uc.edu> + + PR middle-end/24589 + * gcc.c-torture/execute/zero-struct-2.c: New test. + 2005-11-03 Andrew Pinski <pinskia@physics.uc.edu> PR c++/24582 diff --git a/gcc/testsuite/gcc.c-torture/execute/zero-struct-2.c b/gcc/testsuite/gcc.c-torture/execute/zero-struct-2.c new file mode 100644 index 000000000000..ed1d5a027b33 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/zero-struct-2.c @@ -0,0 +1,20 @@ +void abort (void); +int ii; +typedef struct {} raw_spinlock_t; +typedef struct { + raw_spinlock_t raw_lock; +} spinlock_t; +raw_spinlock_t one_raw_spinlock (void) +{ + raw_spinlock_t raw_lock; + ii++; + return raw_lock; +} +int main(void) +{ + spinlock_t lock = (spinlock_t) { .raw_lock = one_raw_spinlock() }; + if (ii != 1) + abort (); + return 0; +} + -- GitLab