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

     1  struct foo
     2  {
     3    int a, b, c, d;
     4    double doubl;
     5  } s1, s2;
     6  
     7  #ifndef ONLY2
     8  
     9  struct foo
    10  structret (s1, i1, i2, s2)
    11       struct foo s1, s2;
    12       int i1, i2;
    13  {
    14    if (i1 != i2)
    15      {
    16        if (i1 < i2)
    17  	return s1;
    18        else
    19  	return s2;
    20      }
    21    s2.a = 11;
    22    s2.b = 22;
    23    s2.c = s1.c;
    24    s2.d = s1.d;
    25    return s2;
    26  }
    27  
    28  #endif
    29  
    30  #ifndef ONLY1
    31  
    32  struct foo
    33  mani (a, b)
    34  {
    35    return structret (s1, a, b, s2);
    36  }
    37  
    38  init ()
    39  {
    40    s1.a = 1;
    41    s1.b = 2;
    42    s1.c = 3;
    43    s1.d = 4;
    44    s1.doubl = 3.1415;
    45    s2.a = -1;
    46    s2.b = -2;
    47    s2.c = -3;
    48    s2.d = -4;
    49    s2.doubl = 2.71818;
    50  }
    51  
    52  main ()
    53  {
    54    struct foo s;
    55  
    56    init ();
    57    s = mani (1, 1);
    58    printf ("%d, %d, %d, %d : %f\n", s.a, s.b, s.c, s.d, s.doubl);
    59  
    60    init ();
    61    s = mani (2, 1);
    62    printf ("%d, %d, %d, %d : %f\n", s.a, s.b, s.c, s.d, s.doubl);
    63  
    64    init ();
    65    s = mani (1, 2);
    66    printf ("%d, %d, %d, %d : %f\n", s.a, s.b, s.c, s.d, s.doubl);
    67  }
    68  
    69  #endif