1 /* PR rtl-optimization/60700 */ 2 /* { dg-do run { target ia32 } } */ 3 /* { dg-options "-O3 -march=i686" } */ 4 5 int 6 __attribute__((noinline)) foo(void)7foo (void) 8 { 9 return 0; 10 } 11 12 void *g = (void *)1; 13 14 struct st { 15 char data[36]; /* must be greater than 32. */ 16 }; 17 18 int 19 __attribute__((noinline)) repro(struct st ** out)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 47 int main()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