aboutsummaryrefslogtreecommitdiff
path: root/gcc/testsuite
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2007-01-03 09:04:11 +0100
committerJakub Jelinek <jakub@gcc.gnu.org>2007-01-03 09:04:11 +0100
commit900f1ea9fa0bd800b1e9d8ee9dfc1f919bf1c4cf (patch)
treebfa55891d122359fc270b4ddaeab7fe2730a2170 /gcc/testsuite
parenta590ac6560e0100d139c98367367bf7e0a467df5 (diff)
downloadgcc-900f1ea9fa0bd800b1e9d8ee9dfc1f919bf1c4cf.zip
gcc-900f1ea9fa0bd800b1e9d8ee9dfc1f919bf1c4cf.tar.gz
gcc-900f1ea9fa0bd800b1e9d8ee9dfc1f919bf1c4cf.tar.bz2
re PR middle-end/30286 (Segfault with -O2 -ftrapv)
PR middle-end/30286 * gcc.dg/pr30286.c: New test. From-SVN: r120387
Diffstat (limited to 'gcc/testsuite')
-rw-r--r--gcc/testsuite/ChangeLog3
-rw-r--r--gcc/testsuite/gcc.dg/pr30286.c37
2 files changed, 40 insertions, 0 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 88a0b34..66adf9b 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -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
index 0000000..9ec49b4
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr30286.c
@@ -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;
+}