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

     1  /* PR middle-end/19551 */
     2  
     3  extern void abort ();
     4  
     5  #define T(type, name) \
     6  __attribute__((pure)) _Complex type		\
     7  foo_##name (int x)				\
     8  {						\
     9    _Complex type r;				\
    10    __real r = x + 1;				\
    11    __imag r = x - 1;				\
    12    return r;					\
    13  }						\
    14  						\
    15  void						\
    16  bar_##name (type *x)				\
    17  {						\
    18    *x = __real foo_##name (5);			\
    19  }						\
    20  						\
    21  void						\
    22  baz_##name (type *x)				\
    23  {						\
    24    *x = __imag foo_##name (5);			\
    25  }
    26  
    27  typedef long double ldouble_t;
    28  typedef long long llong;
    29  
    30  T (float, float)
    31  T (double, double)
    32  T (long double, ldouble_t)
    33  T (char, char)
    34  T (short, short)
    35  T (int, int)
    36  T (long, long)
    37  T (long long, llong)
    38  #undef T
    39  
    40  int
    41  main (void)
    42  {
    43  #define T(type, name) \
    44    {						\
    45      type var = 0;				\
    46      bar_##name (&var);				\
    47      if (var != 6)				\
    48        abort ();					\
    49      var = 0;					\
    50      baz_##name (&var);				\
    51      if (var != 4)				\
    52        abort ();					\
    53    }
    54    T (float, float)
    55    T (double, double)
    56    T (long double, ldouble_t)
    57    T (char, char)
    58    T (short, short)
    59    T (int, int)
    60    T (long, long)
    61    T (long long, llong)
    62    return 0;
    63  }