modernc.org/ccgo/v3@v3.16.14/lib/testdata/gcc-9.1.0/gcc/testsuite/gcc.c-torture/execute/pr51877.c (about)

     1  /* PR tree-optimization/51877 */
     2  
     3  extern void abort (void);
     4  struct A { int a; char b[32]; } a, b;
     5  
     6  __attribute__((noinline, noclone))
     7  struct A
     8  bar (int x)
     9  {
    10    struct A r;
    11    static int n;
    12    r.a = ++n;
    13    __builtin_memset (r.b, 0, sizeof (r.b));
    14    r.b[0] = x;
    15    return r;
    16  }
    17  
    18  __attribute__((noinline, noclone))
    19  void
    20  baz (void)
    21  {
    22    asm volatile ("" : : : "memory");
    23  }
    24  
    25  __attribute__((noinline, noclone))
    26  void
    27  foo (struct A *x, int y)
    28  {
    29    if (y == 6)
    30      a = bar (7);
    31    else
    32      *x = bar (7);
    33    baz ();
    34  }
    35  
    36  int
    37  main ()
    38  {
    39    a = bar (3);
    40    b = bar (4);
    41    if (a.a != 1 || a.b[0] != 3 || b.a != 2 || b.b[0] != 4)
    42      abort ();
    43    foo (&b, 0);
    44    if (a.a != 1 || a.b[0] != 3 || b.a != 3 || b.b[0] != 7)
    45      abort ();
    46    foo (&b, 6);
    47    if (a.a != 4 || a.b[0] != 7 || b.a != 3 || b.b[0] != 7)
    48      abort ();
    49    return 0;
    50  }