]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR middle-end/32374 (internal compiler error: in reload_cse_simplify_operands...
authorUros Bizjak <ubizjak@gmail.com>
Fri, 22 Jun 2007 18:51:28 +0000 (20:51 +0200)
committerUros Bizjak <uros@gcc.gnu.org>
Fri, 22 Jun 2007 18:51:28 +0000 (20:51 +0200)
        PR middle-end/32374
        * expr.c (store_constructor): Do not clobber non-zeroed memory.

testsuite/ChangeLog:

        PR middle-end/32374
        * gcc.dg/pr32374.c: New test.

From-SVN: r125955

gcc/ChangeLog
gcc/expr.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/pr32374.c [new file with mode: 0644]

index 349272b84807dde4bdae4e98e57ef39edb4461c7..09f25762d19db32664adb6b7b9073059a8ce09a5 100644 (file)
@@ -1,3 +1,8 @@
+2007-06-19  Uros Bizjak  <ubizjak@gmail.com>
+
+       PR middle-end/32374
+       * expr.c (store_constructor): Do not clobber non-zeroed memory. 
+
 2007-06-22  Uros Bizjak  <ubizjak@gmail.com>
 
        PR target/32413
index 3f0caf117d53261d237e358180e11b3662c85aad..0739b0533bc885a7fa78e4fd82377f5fd887deda 100644 (file)
@@ -5062,7 +5062,7 @@ store_constructor (tree exp, rtx target, int cleared, HOST_WIDE_INT size)
            cleared = 1;
          }
 
-       if (cleared)
+       if (REG_P (target) && !cleared)
          emit_insn (gen_rtx_CLOBBER (VOIDmode, target));
 
        /* Store each element of the constructor into the
index 658ac0c2775707af443f45d4323fd4bea2da7558..d8ae75c76c60ec2f69e23d97235f74878404f19d 100644 (file)
@@ -1,3 +1,8 @@
+2007-06-22  Uros Bizjak  <ubizjak@gmail.com>
+
+       PR middle-end/32374
+       * gcc.dg/pr32374.c: New test.
+
 2007-06-22  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
 
        PR fortran/32360
diff --git a/gcc/testsuite/gcc.dg/pr32374.c b/gcc/testsuite/gcc.dg/pr32374.c
new file mode 100644 (file)
index 0000000..de15d55
--- /dev/null
@@ -0,0 +1,20 @@
+/* { dg-do compile } */
+/* { dg-options "-O2" } */
+
+extern int *stderr;
+
+void f (int *, const char *, ...);
+
+void g (const char *conf_name)
+{
+  typedef struct
+  {
+    const char *label;
+    const int value;
+  } Section;
+
+  const Section sections[2] = { {"", 0}, {"", 1} };
+
+  f (stderr, "", "", conf_name, 0, sections[0]);
+  f (stderr, "", "", conf_name, 0, sections[0]);
+}