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

     1  /* Test that sibling call is not used if there is an argument overlap.  */
     2  
     3  extern void abort (void);
     4  
     5  struct S
     6  {
     7    int a, b, c;
     8  };
     9  
    10  int
    11  foo2 (struct S x, struct S y)
    12  {
    13    if (x.a != 3 || x.b != 4 || x.c != 5)
    14      abort ();
    15    if (y.a != 6 || y.b != 7 || y.c != 8)
    16      abort ();
    17    return 0;
    18  }
    19  
    20  int
    21  foo3 (struct S x, struct S y, struct S z)
    22  {
    23    foo2 (x, y);
    24    if (z.a != 9 || z.b != 10 || z.c != 11)
    25      abort ();
    26    return 0;
    27  }
    28  
    29  int
    30  bar2 (struct S x, struct S y)
    31  {
    32    return foo2 (y, x);
    33  }
    34  
    35  int
    36  bar3 (struct S x, struct S y, struct S z)
    37  {
    38    return foo3 (y, x, z);
    39  }
    40  
    41  int
    42  baz3 (struct S x, struct S y, struct S z)
    43  {
    44    return foo3 (y, z, x);
    45  }
    46  
    47  int
    48  main (void)
    49  {
    50    struct S a = { 3, 4, 5 }, b = { 6, 7, 8 }, c = { 9, 10, 11 };
    51  
    52    bar2 (b, a);
    53    bar3 (b, a, c);
    54    baz3 (c, a, b);
    55    return 0;
    56  }