diff options
Diffstat (limited to 'gcc/testsuite/gcc.dg/max-1.c')
-rw-r--r-- | gcc/testsuite/gcc.dg/max-1.c | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/gcc/testsuite/gcc.dg/max-1.c b/gcc/testsuite/gcc.dg/max-1.c new file mode 100644 index 000000000..40f2145c0 --- /dev/null +++ b/gcc/testsuite/gcc.dg/max-1.c @@ -0,0 +1,45 @@ +/* PR middle-end/18548 */ +/* Test case reduced by Andrew Pinski <pinskia@physics.uc.edu> */ +/* { dg-do run } */ +/* { dg-options "-O1 " } */ +/* Option -fno-tree-lrs removed By Andrew MacLeod since it is no longer + supported in the compiler beginning with GCC 4.3. */ +/* m32c has varying sized pointers */ +/* { dg-skip-if "" { "m32c-*-*" } { "*" } { "-mcpu=m32c" "-mcpu=m32cm" } } */ + +/* Kludge to make it signed. */ +#define unsigned signed +__extension__ typedef __SIZE_TYPE__ ssize_t; +#undef unsigned + +extern void abort (void); + +ssize_t fff[10]; + +void f(ssize_t a, ssize_t b) +{ + ssize_t crcc = b; + ssize_t d = *((ssize_t*)(a+1)); + int i; + + a = d >= b? d:b; + + + for(i=0;i<10;i++) + fff[i] = a; +} + +/* The variable a cannot be a local variable as we get better aliasing + now and decide that the store to a is dead. The better aliasing comes + from better representation of pointer arithmetic. */ +ssize_t a = 10; +int main(void) +{ + int i; + f((ssize_t)(&a)-1,0); + for(i = 0;i<10;i++) + if (fff[i]!=10) + abort (); + return 0; +} + |