diff options
Diffstat (limited to 'gcc-4.8.1/gcc/testsuite/gcc.dg/pr27959.c')
-rw-r--r-- | gcc-4.8.1/gcc/testsuite/gcc.dg/pr27959.c | 93 |
1 files changed, 0 insertions, 93 deletions
diff --git a/gcc-4.8.1/gcc/testsuite/gcc.dg/pr27959.c b/gcc-4.8.1/gcc/testsuite/gcc.dg/pr27959.c deleted file mode 100644 index f1fdda1b2..000000000 --- a/gcc-4.8.1/gcc/testsuite/gcc.dg/pr27959.c +++ /dev/null @@ -1,93 +0,0 @@ -/* PR middle-end/27959 */ -/* { dg-do run { target { int32plus } } } */ -/* { dg-options "-O2" } */ -/* { dg-options "-O2 -mtune=z990" { target s390*-*-* } } */ - -extern void abort (void); - -struct B -{ - unsigned int b1, b2, b3; - char b4; -}; - -struct C -{ - char c1; -}; - -struct D -{ - char *d1; - struct C **d2; - unsigned int d3; -}; - -void -__attribute__((noinline)) -foo (void *x, struct B *y, unsigned int *z) -{ - if (x) - abort (); - if (y->b1 != 7 || y->b2 != 5 || y->b3 != 3 || y->b4) - abort (); - if (*z != 2) - abort (); -} - -int -__attribute__((noinline)) -baz (unsigned int *x, unsigned int y) -{ - asm volatile ("" : : "r" (&x), "r" (&y) : "memory"); - return *x + y; -} - -inline int bar (unsigned int *x, unsigned int y) -{ - if (y < *x) - return 0; - return baz (x, y); -} - -unsigned int * -__attribute__((noinline)) -test (struct D *x, unsigned int *y) -{ - struct B b; - unsigned int c; - - bar (y, x->d3); - if ((*(x->d2))->c1) - c = ((unsigned char) x->d1[0] - + ((unsigned char) x->d1[1] << 8) - + ((unsigned char) x->d1[2] << 16) - + ((short) x->d1[3] << 24)); - else - { - int d; - ((char *) &d)[0] = x->d1[0]; - ((char *) &d)[1] = x->d1[1]; - ((char *) &d)[2] = x->d1[2]; - ((char *) &d)[3] = x->d1[3]; - c = d; - } - b.b4 = 0; - b.b1 = c / 10000L % 10000; - b.b2 = c / 100 % 100; - b.b3 = c % 100; - foo (0, &b, y); - return y; -} - -int -main (void) -{ - unsigned int x = 900070503; - unsigned int y = 2; - struct C c = { 0 }, *cptr = &c; - struct D d = { (char *) &x, &cptr, 0 }; - if (test (&d, &y) != &y) - abort (); - return 0; -} |