1  /* PR rtl-optimization/60700 */
       2  /* { dg-do run { target ia32 } } */
       3  /* { dg-options "-O3 -march=i686" } */
       4  
       5  int
       6  __attribute__((noinline))
       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))
      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
      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  }