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)7 foo (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)20 repro(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()48 main ()
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