/* Tests for _FloatN / _FloatNx types: test usual arithmetic conversions. */ /* { dg-do compile } */ /* { dg-options "" } */ /* { dg-add-options float32 } */ /* { dg-add-options float64 } */ /* { dg-add-options float32x } */ /* { dg-require-effective-target float32 } */ /* { dg-require-effective-target float64 } */ /* { dg-require-effective-target float32x } */ #define __STDC_WANT_IEC_60559_TYPES_EXT__ #include int i; #define TEST(VAR, TYPE1, TYPE2, RESTYPE) \ do \ { \ typedef __typeof__ ((TYPE1) 0 + (TYPE2) 1) restype; \ typedef __typeof__ (i ? (TYPE1) 0 : (TYPE2) 1) restype2; \ typedef RESTYPE exptype; \ extern restype VAR; \ extern restype2 VAR; \ extern exptype VAR; \ } \ while (0) void f (void) { TEST (v1, float, double, double); #if DBL_MANT_DIG > FLT32_MANT_DIG TEST (v2, double, _Float32, double); #endif #if DBL_MANT_DIG <= FLT64_MANT_DIG TEST (v3, double, _Float64, _Float64); #endif #if DBL_MANT_DIG >= FLT32X_MANT_DIG TEST (v4, double, _Float32x, double); #endif #if FLT_MANT_DIG <= FLT32_MANT_DIG TEST (v5, float, _Float32, _Float32); #endif #if FLT32X_MANT_DIG <= FLT64_MANT_DIG TEST (v6, _Float32x, _Float64, _Float64); #endif TEST (v7, _Float32, _Float64, _Float64); TEST (v8, _Float32, _Float32x, _Float32x); }