| /* PR rtl-optimization/60700 */ |
| /* { dg-do run { target ia32 } } */ |
| /* { dg-options "-O3 -march=i686" } */ |
| |
| int |
| __attribute__((noinline)) |
| foo (void) |
| { |
| return 0; |
| } |
| |
| void *g = (void *)1; |
| |
| struct st { |
| char data[36]; /* must be greater than 32. */ |
| }; |
| |
| int |
| __attribute__((noinline)) |
| repro(struct st **out) |
| { |
| int status = 0; |
| |
| *out = 0; |
| |
| status = foo(); |
| if (status != 0) { |
| return status; |
| } |
| |
| if (0 == g) { |
| status = 999; |
| return status; |
| } |
| |
| *out = (struct st *)__builtin_malloc(sizeof(struct st)); |
| if (0 == *out) { |
| status = 42; |
| return status; |
| } |
| |
| __builtin_memset(*out, 0, sizeof(struct st)); |
| |
| return status; |
| } |
| |
| int |
| main () |
| { |
| struct st *p; |
| int ret = repro (&p); |
| unsigned int i; |
| |
| for (i = 0; i < sizeof (p->data)/sizeof (p->data[0]); i++) |
| if (p->data[i] != 0) |
| __builtin_abort (); |
| |
| return ret; |
| } |