1  /* PR tree-optimization/43904.  */
       2  /* { dg-do run } */
       3  /* { dg-options "-O1 -foptimize-sibling-calls" } */
       4  
       5  typedef __SIZE_TYPE__ size_t;
       6  extern void abort(void);
       7  
       8  void *memcpy(void *dest, const void *src, size_t n);
       9  
      10  void
      11  buggy_init(void *ptr, size_t size)
      12  {
      13    const char *str = "Hello world!";
      14    memcpy(ptr, &str, size);
      15  }
      16  
      17  void
      18  expose_bug(void *ptr, size_t size)
      19  {
      20    const char *str;
      21    memcpy(&str, ptr, size);
      22    if (*str != 'H')
      23      abort ();
      24  }
      25  
      26  int
      27  main()
      28  {
      29    const char *ptr;
      30    buggy_init(&ptr, sizeof(ptr));
      31    expose_bug(&ptr, sizeof(ptr));
      32    return 0;
      33  }