(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.dg/
floatn-arithconv.c
       1  /* Tests for _FloatN / _FloatNx types: test usual arithmetic
       2     conversions.  */
       3  /* { dg-do compile } */
       4  /* { dg-options "" } */
       5  /* { dg-add-options float32 } */
       6  /* { dg-add-options float64 } */
       7  /* { dg-add-options float32x } */
       8  /* { dg-require-effective-target float32 } */
       9  /* { dg-require-effective-target float64 } */
      10  /* { dg-require-effective-target float32x } */
      11  
      12  #define __STDC_WANT_IEC_60559_TYPES_EXT__
      13  #include <float.h>
      14  
      15  int i;
      16  
      17  #define TEST(VAR, TYPE1, TYPE2, RESTYPE)			\
      18    do								\
      19      {								\
      20        typedef __typeof__ ((TYPE1) 0 + (TYPE2) 1) restype;	\
      21        typedef __typeof__ (i ? (TYPE1) 0 : (TYPE2) 1) restype2;	\
      22        typedef RESTYPE exptype;					\
      23        extern restype VAR;					\
      24        extern restype2 VAR;					\
      25        extern exptype VAR;					\
      26      }								\
      27    while (0)
      28  
      29  void
      30  f (void)
      31  {
      32    TEST (v1, float, double, double);
      33  #if DBL_MANT_DIG > FLT32_MANT_DIG
      34    TEST (v2, double, _Float32, double);
      35  #endif
      36  #if DBL_MANT_DIG <= FLT64_MANT_DIG
      37    TEST (v3, double, _Float64, _Float64);
      38  #endif
      39  #if DBL_MANT_DIG >= FLT32X_MANT_DIG
      40    TEST (v4, double, _Float32x, double);
      41  #endif
      42  #if FLT_MANT_DIG <= FLT32_MANT_DIG
      43    TEST (v5, float, _Float32, _Float32);
      44  #endif
      45  #if FLT32X_MANT_DIG <= FLT64_MANT_DIG
      46    TEST (v6, _Float32x, _Float64, _Float64);
      47  #endif
      48    TEST (v7, _Float32, _Float64, _Float64);
      49    TEST (v8, _Float32, _Float32x, _Float32x);
      50  }