1 /* { dg-options "-O2" } */ 2 3 /* N1150 5.1 Conversion between decimal floating integer. 4 C99 6.3.1.4(1a) New. 5 These should all be folded at compile time. */ 6 7 #include "dfp-dbg.h" 8 9 #ifdef __cplusplus 10 #define BOOL bool 11 #else 12 #define BOOL _Bool 13 #endif 14 15 extern void link_error (void); 16 17 int main()18main () 19 { 20 _Decimal32 d32; 21 _Decimal64 d64; 22 _Decimal128 d128; 23 unsigned int ui; 24 unsigned long ul; 25 unsigned long long ull; 26 int si; 27 long sl; 28 long long sll; 29 BOOL b; 30 31 /* C99 Section 6.7.2 Type specifiers. Type _Bool is 32 mentioned in this section. Conversions between 33 BOOL and DFP types. */ 34 35 /* Decimal float to unsigned integer. */ 36 d32 = 456.789df; 37 d64 = 23.456789dd; 38 d128 = 1234.5678dl; 39 40 ui = d32; 41 if (ui != 456U) 42 link_error (); 43 ul = d32; 44 if (ul != 456UL) 45 link_error (); 46 ull = d32; 47 if (ull != 456ULL) 48 link_error (); 49 50 ui = d64; 51 if (ui != 23U) 52 link_error (); 53 ul = d64; 54 if (ul != 23UL) 55 link_error (); 56 ull = d64; 57 if (ull != 23ULL) 58 link_error (); 59 60 ui = d128; 61 if (ui != 1234U) 62 link_error (); 63 ul = d128; 64 if (ul != 1234UL) 65 link_error (); 66 ull = d128; 67 if (ull != 1234ULL) 68 link_error (); 69 70 /* Decimal float to signed integer. */ 71 72 /* Decimal float to BOOL. */ 73 d32 = 1.23df; 74 d64 = -3.4dd; 75 d128 = 0.00003dl; 76 77 b = d32; 78 if (!b) 79 link_error (); 80 b = d64; 81 if (!b) 82 link_error (); 83 b = d128; 84 if (!b) 85 link_error (); 86 87 /* Unsigned integer to decimal float. */ 88 ui = 987U; 89 ul = 345678UL; 90 ull = 1234567ULL; 91 92 d32 = ui; 93 if (d32 != 987.0df) 94 link_error (); 95 d32 = ul; 96 if (d32 != 345678.0df) 97 link_error (); 98 d32 = ull; 99 if (d32 != 1234567.df) 100 link_error (); 101 102 d64 = ui; 103 if (d64 != 987.0dd) 104 link_error (); 105 d64 = ul; 106 if (d64 != 345678.0dd) 107 link_error (); 108 d64 = ull; 109 if (d64 != 1234567.dd) 110 link_error (); 111 112 d128 = ui; 113 if (d128 != 987.0dl) 114 link_error (); 115 d128 = ul; 116 if (d128 != 345678.0dl) 117 link_error (); 118 d128 = ull; 119 if (d128 != 1234567.dl) 120 link_error (); 121 122 /* Signed integer to decimal float. */ 123 si = -987; 124 sl = -345678; 125 sll = -1234567; 126 127 d32 = si; 128 if (d32 != -987.0df) 129 link_error (); 130 d32 = sl; 131 if (d32 != -345678.0df) 132 link_error (); 133 d32 = sll; 134 if (d32 != -1234567.df) 135 link_error (); 136 137 d64 = si; 138 if (d64 != -987.0dd) 139 link_error (); 140 d64 = sl; 141 if (d64 != -345678.0dd) 142 link_error (); 143 d64 = sll; 144 if (d64 != -1234567.dd) 145 link_error (); 146 147 d128 = si; 148 if (d128 != -987.0dl) 149 link_error (); 150 d128 = sl; 151 if (d128 != -345678.0dl) 152 link_error (); 153 d128 = sll; 154 if (d128 != -1234567.dl) 155 link_error (); 156 157 /* BOOL to decimal float. */ 158 d32 = 0.0DF; 159 d64 = 0.0DD; 160 d128 = 0.0DL; 161 162 b = d32; 163 if (b) 164 link_error (); 165 b = d64; 166 if (b) 167 link_error (); 168 b = d128; 169 if (b) 170 link_error (); 171 172 return 0; 173 } 174