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