+2003-12-03 Jakub Jelinek <jakub@redhat.com>
+
+ * expr.c (store_constructor): Only set RTX_UNCHANGING_P for
+ read-only field if cleared is 0.
+
2003-12-03 Nathanael Nerode <neroden@gcc.gnu.org>
* config.gcc: Mark obsolete targets for GCC 3.4.
highest_pow2_factor (offset));
}
- if (TREE_READONLY (field))
+ /* If the constructor has been cleared, setting RTX_UNCHANGING_P
+ on the MEM might lead to scheduling the clearing after the
+ store. */
+ if (TREE_READONLY (field) && !cleared)
{
if (GET_CODE (to_rtx) == MEM)
to_rtx = copy_rtx (to_rtx);
+2003-12-03 Jakub Jelinek <jakub@redhat.com>
+
+ * gcc.dg/20031202-1.c: New test.
+
2003-12-03 Mark Mitchell <mark@codesourcery.com>
PR c++/10771
2003-12-02 Giovanni Bajo <giovannibajo@gcc.gnu.org>
- PR c++/10126\r
+ PR c++/10126
* g++.dg/template/ptrmem8.C: New test.
2003-12-02 Giovanni Bajo <giovannibajo@gcc.gnu.org>
- PR c++/12573\r
+ PR c++/12573
* g++.dg/template/dependent-expr3.C: New test.
2003-12-01 James Lemke <jim@wasabisystems.com>
--- /dev/null
+/* { dg-do run } */
+/* { dg-options "-O2" } */
+/* { dg-options "-O2 -mtune=i686" { target i?86-*-* } } */
+
+extern void abort (void);
+extern void exit (int);
+
+struct A { char p[6]; } __attribute__((packed));
+struct B {
+ struct A a;
+ void * const b;
+ struct A const * const c;
+ struct A const *d;
+};
+
+char v;
+
+int __attribute__((noinline))
+foo (struct B *b)
+{
+ int i;
+ for (i = 0; i < 6; ++i)
+ if (b->a.p[i])
+ abort ();
+ if (b->b != &v || b->c || b->d)
+ abort ();
+ return 12;
+}
+
+int __attribute__((noinline))
+bar (void *x)
+{
+ __asm __volatile ("" : "=r" (x) : "0" (x));
+ struct B y = { .b = x, .c = (void *) 0 };
+ return foo (&y) + 1;
+}
+
+int
+main (void)
+{
+ if (bar (&v) != 13)
+ abort ();
+ exit (0);
+}