1 // P1467R9 - Extended floating-point types and standard names.
2 // { dg-do compile { target c++23 } }
4 // { dg-add-options float16 }
5 // { dg-add-options float32 }
6 // { dg-add-options float64 }
7 // { dg-add-options float128 }
9 #include "ext-floating.h"
11 #ifdef __STRICT_ANSI__
12 #undef __SIZEOF_FLOAT128__
18 float fb = (float) 1.0f;
20 float fd = (float) 1.0;
22 float ff = (float) 1.0L;
23 #ifdef __SIZEOF_FLOAT128__
25 float fh = (float) 1.0Q;
28 double db = (double) 1.0f;
30 double dd = (double) 1.0;
32 double df = (double) 1.0L;
33 #ifdef __SIZEOF_FLOAT128__
35 double dh = (double) 1.0Q;
37 long double lda = 1.0f;
38 long double ldb = (long double) 1.0f;
39 long double ldc = 1.0;
40 long double ldd = (long double) 1.0;
41 long double lde = 1.0L;
42 long double ldf = (long double) 1.0L;
43 #ifdef __SIZEOF_FLOAT128__
44 long double ldg = 1.0Q;
45 long double ldh = (long double) 1.0Q;
47 __float128 qb = (__float128) 1.0f;
49 __float128 qd = (__float128) 1.0;
51 __float128 qf = (__float128) 1.0L;
53 __float128 qh = (__float128) 1.0Q;
55 #ifdef __STDCPP_FLOAT16_T__
56 float16_t f16a = 1.0F16;
57 float16_t f16b = (float16_t) 1.0F16;
58 #ifdef __STDCPP_FLOAT32_T__
59 float16_t f16c = 1.0F32; // { dg-warning "converting to 'std::float16_t' \\\{aka '_Float16'\\\} from '_Float32' with greater conversion rank" "" { target { float16 && float32 } } }
60 float16_t f16d = (float16_t) 1.0F32;
62 #ifdef __STDCPP_FLOAT64_T__
63 float16_t f16e = 1.0F64; // { dg-warning "converting to 'std::float16_t' \\\{aka '_Float16'\\\} from '_Float64' with greater conversion rank" "" { target { float16 && float64 } } }
64 float16_t f16f = (float16_t) 1.0F64;
66 #ifdef __STDCPP_FLOAT128_T__
67 float16_t f16g = 1.0F128; // { dg-warning "converting to 'std::float16_t' \\\{aka '_Float16'\\\} from '_Float128' with greater conversion rank" "" { target { float16 && float128 } } }
68 float16_t f16h = (float16_t) 1.0F128;
70 float16_t f16j = (float16_t) 1.0f;
71 float16_t f16l = (float16_t) 1.0;
72 float16_t f16n = (float16_t) 1.0L;
73 #ifdef __SIZEOF_FLOAT128__
74 float16_t f16p = (float16_t) 1.0Q;
77 #ifdef __STDCPP_FLOAT32_T__
78 #ifdef __STDCPP_FLOAT16_T__
79 float32_t f32a = 1.0F16;
80 float32_t f32b = (float32_t) 1.0F16;
82 float32_t f32c = 1.0F32;
83 float32_t f32d = (float32_t) 1.0F32;
84 #ifdef __STDCPP_FLOAT64_T__
85 float32_t f32e = 1.0F64; // { dg-warning "converting to 'std::float32_t' \\\{aka '_Float32'\\\} from '_Float64' with greater conversion rank" "" { target { float32 && float64 } } }
86 float32_t f32f = (float32_t) 1.0F64;
88 #ifdef __STDCPP_FLOAT128_T__
89 float32_t f32g = 1.0F128; // { dg-warning "converting to 'std::float32_t' \\\{aka '_Float32'\\\} from '_Float128' with greater conversion rank" "" { target { float32 && float128 } } }
90 float32_t f32h = (float32_t) 1.0F128;
92 #if __FLT_MAX_EXP__ <= __FLT32_MAX_EXP__ && __FLT_MANT_DIG__ <= __FLT32_MANT_DIG__
93 float32_t f32i = 1.0f;
95 float32_t f32j = (float32_t) 1.0f;
96 float32_t f32l = (float32_t) 1.0;
97 float32_t f32n = (float32_t) 1.0L;
98 #ifdef __SIZEOF_FLOAT128__
99 float32_t f32p = (float32_t) 1.0Q;
102 #ifdef __STDCPP_FLOAT64_T__
103 #ifdef __STDCPP_FLOAT16_T__
104 float64_t f64a = 1.0F16;
105 float64_t f64b = (float64_t) 1.0F16;
107 #ifdef __STDCPP_FLOAT32_T__
108 float64_t f64c = 1.0F32;
109 float64_t f64d = (float64_t) 1.0F32;
111 float64_t f64e = 1.0F64;
112 float64_t f64f = (float64_t) 1.0F64;
113 #ifdef __STDCPP_FLOAT128_T__
114 float64_t f64g = 1.0F128; // { dg-warning "converting to 'std::float64_t' \\\{aka '_Float64'\\\} from '_Float128' with greater conversion rank" "" { target { float64 && float128 } } }
115 float64_t f64h = (float64_t) 1.0F128;
117 #if __FLT_MAX_EXP__ <= __FLT64_MAX_EXP__ && __FLT_MANT_DIG__ <= __FLT64_MANT_DIG__
118 float64_t f64i = 1.0f;
120 float64_t f64j = (float64_t) 1.0f;
121 #if __DBL_MAX_EXP__ <= __FLT64_MAX_EXP__ && __DBL_MANT_DIG__ <= __FLT64_MANT_DIG__
122 float64_t f64k = 1.0;
124 float64_t f64l = (float64_t) 1.0;
125 float64_t f64n = (float64_t) 1.0L;
126 #ifdef __SIZEOF_FLOAT128__
127 float64_t f64p = (float64_t) 1.0Q;
130 #ifdef __STDCPP_FLOAT128_T__
131 #ifdef __STDCPP_FLOAT16_T__
132 float128_t f128a = 1.0F16;
133 float128_t f128b = (float128_t) 1.0F16;
135 #ifdef __STDCPP_FLOAT32_T__
136 float128_t f128c = 1.0F32;
137 float128_t f128d = (float128_t) 1.0F32;
139 #ifdef __STDCPP_FLOAT64_T__
140 float128_t f128e = 1.0F64;
141 float128_t f128f = (float128_t) 1.0F64;
143 float128_t f128g = 1.0F128;
144 float128_t f128h = (float128_t) 1.0F128;
145 #if __FLT_MAX_EXP__ <= __FLT128_MAX_EXP__ && __FLT_MANT_DIG__ <= __FLT128_MANT_DIG__
146 float128_t f128i = 1.0f;
148 float128_t f128j = (float128_t) 1.0f;
149 #if __DBL_MAX_EXP__ <= __FLT128_MAX_EXP__ && __DBL_MANT_DIG__ <= __FLT128_MANT_DIG__
150 float128_t f128k = 1.0;
152 float128_t f128l = (float128_t) 1.0;
153 #if __LDBL_MAX_EXP__ <= __FLT128_MAX_EXP__ && __LDBL_MANT_DIG__ <= __FLT128_MANT_DIG__ && __LDBL_MANT_DIG__ != 106
154 float128_t f128m = 1.0L;
156 float128_t f128n = (float128_t) 1.0L;
157 #ifdef __SIZEOF_FLOAT128__
158 float128_t f128o = 1.0Q;
159 float128_t f128p = (float128_t) 1.0Q;