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

     1  /* This testcase is to make sure we have i in referenced vars and that we
     2     properly compute aliasing for the loads and stores.  */
     3  
     4  extern void abort (void);
     5  
     6  static int i;
     7  static int *p = &i;
     8  
     9  int __attribute__((noinline))
    10  foo(int *q)
    11  {
    12    *p = 1;
    13    *q = 2;
    14    return *p;
    15  }
    16  
    17  int __attribute__((noinline))
    18  bar(int *q)
    19  {
    20    *q = 2;
    21    *p = 1;
    22    return *q;
    23  }
    24  
    25  int main()
    26  {
    27    int j = 0;
    28  
    29    if (foo(&i) != 2)
    30      abort ();
    31    if (bar(&i) != 1)
    32      abort ();
    33    if (foo(&j) != 1)
    34      abort ();
    35    if (j != 2)
    36      abort ();
    37    if (bar(&j) != 2)
    38      abort ();
    39    if (j != 2)
    40      abort ();
    41  
    42    return 0;
    43  }