(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.c-torture/
execute/
20050121-1.c
       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  }