1/* PR rtl-optimization/60700 */ 2/* { dg-do run { target ia32 } } */ 3/* { dg-options "-O3 -march=i686" } */ 4 5int 6__attribute__((noinline)) 7foo (void) 8{ 9 return 0; 10} 11 12void *g = (void *)1; 13 14struct st { 15 char data[36]; /* must be greater than 32. */ 16}; 17 18int 19__attribute__((noinline)) 20repro(struct st **out) 21{ 22 int status = 0; 23 24 *out = 0; 25 26 status = foo(); 27 if (status != 0) { 28 return status; 29 } 30 31 if (0 == g) { 32 status = 999; 33 return status; 34 } 35 36 *out = (struct st *)__builtin_malloc(sizeof(struct st)); 37 if (0 == *out) { 38 status = 42; 39 return status; 40 } 41 42 __builtin_memset(*out, 0, sizeof(struct st)); 43 44 return status; 45} 46 47int 48main () 49{ 50 struct st *p; 51 int ret = repro (&p); 52 unsigned int i; 53 54 for (i = 0; i < sizeof (p->data)/sizeof (p->data[0]); i++) 55 if (p->data[i] != 0) 56 __builtin_abort (); 57 58 return ret; 59} 60