46 lines
1.0 KiB
C
46 lines
1.0 KiB
C
/* 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;
|
|
}
|
|
|