aboutsummaryrefslogtreecommitdiffstats
path: root/gcc-4.9/gcc/testsuite/gcc.c-torture/execute/20010409-1.c
diff options
context:
space:
mode:
Diffstat (limited to 'gcc-4.9/gcc/testsuite/gcc.c-torture/execute/20010409-1.c')
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.c-torture/execute/20010409-1.c43
1 files changed, 43 insertions, 0 deletions
diff --git a/gcc-4.9/gcc/testsuite/gcc.c-torture/execute/20010409-1.c b/gcc-4.9/gcc/testsuite/gcc.c-torture/execute/20010409-1.c
new file mode 100644
index 000000000..95a5dc344
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.c-torture/execute/20010409-1.c
@@ -0,0 +1,43 @@
+typedef __SIZE_TYPE__ size_t;
+extern size_t strlen (const char *s);
+
+typedef struct A {
+ int a, b;
+} A;
+
+typedef struct B {
+ struct A **a;
+ int b;
+} B;
+
+A *a;
+int b = 1, c;
+B d[1];
+
+void foo (A *x, const char *y, int z)
+{
+ c = y[4] + z * 25;
+}
+
+A *bar (const char *v, int w, int x, const char *y, int z)
+{
+ if (w)
+ abort ();
+ exit (0);
+}
+
+void test (const char *x, int *y)
+{
+ foo (d->a[d->b], "test", 200);
+ d->a[d->b] = bar (x, b ? 0 : 65536, strlen (x), "test", 201);
+ d->a[d->b]->a++;
+ if (y)
+ d->a[d->b]->b = *y;
+}
+
+int main ()
+{
+ d->b = 0;
+ d->a = &a;
+ test ("", 0);
+}