OSDN Git Service

2005-11-03 Andrew Pinski <pinskia@physics.uc.edu>
authorpinskia <pinskia@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 3 Nov 2005 15:21:15 +0000 (15:21 +0000)
committerpinskia <pinskia@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 3 Nov 2005 15:21:15 +0000 (15:21 +0000)
        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
gcc/gimplify.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.c-torture/execute/zero-struct-2.c [new file with mode: 0644]

index 2e53736..e449baa 100644 (file)
@@ -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
index b7d891e..52e70bd 100644 (file)
@@ -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
index 82124c6..ffb3ee0 100644 (file)
@@ -1,5 +1,10 @@
 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
        * g++.dg/init/switch1.C: New test.
 
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 (file)
index 0000000..ed1d5a0
--- /dev/null
@@ -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;
+}
+