PR middle-end/30286
authorjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 3 Jan 2007 08:04:11 +0000 (08:04 +0000)
committerjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 3 Jan 2007 08:04:11 +0000 (08:04 +0000)
* gcc.dg/pr30286.c: New test.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@120387 138bc75d-0d04-0410-961f-82ee72b054a4

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

index 88a0b34..66adf9b 100644 (file)
@@ -1,5 +1,8 @@
 2007-01-03  Jakub Jelinek  <jakub@redhat.com>
 
+       PR middle-end/30286
+       * gcc.dg/pr30286.c: New test.
+
        PR c++/29535
        * g++.dg/template/crash66.C: New test.
 
diff --git a/gcc/testsuite/gcc.dg/pr30286.c b/gcc/testsuite/gcc.dg/pr30286.c
new file mode 100644 (file)
index 0000000..9ec49b4
--- /dev/null
@@ -0,0 +1,37 @@
+/* PR middle-end/30286 */
+/* { dg-do run } */
+/* { dg-options "-O2 -ftrapv" } */
+
+extern void abort (void);
+struct S { struct S *s; };
+struct T { struct S *t[25]; };
+
+void
+__attribute__((noinline))
+foo (int i, struct T *x, struct S *y)
+{
+  int j;
+  for (j = 14; j > i; j--)
+    x->t[j] = y->s;
+}
+
+int
+main (void)
+{
+  struct S s;
+  struct T t;
+  int i;
+
+  s.s = &s;
+  __builtin_memset (&t, 0, sizeof (t));
+  foo (6, &t, &s);
+  for (i = 0; i < 25; i++)
+    if (t.t[i] != ((i > 6 && i <= 14) ? &s : (struct S *) 0))
+      abort ();
+  __builtin_memset (&t, 0, sizeof (t));
+  foo (-1, &t, &s);
+  for (i = 0; i < 25; i++)
+    if (t.t[i] != ((i >= 0 && i <= 14) ? &s : (struct S *) 0))
+      abort ();
+  return 0;
+}