|
38 | 38 | #define ULONGLONG_OVERFLOW 0x8000000000000000ull |
39 | 39 | #endif |
40 | 40 |
|
41 | | -#ifdef __GNUC__ |
42 | | -#define todo_gcc todo_ros |
43 | | -#else |
44 | | -#define todo_gcc |
45 | | -#endif |
46 | | - |
47 | 41 | __declspec(noinline) |
48 | 42 | long cast_float_to_long(float f) |
49 | 43 | { |
@@ -157,8 +151,10 @@ void Test_float(void) |
157 | 151 | ok_eq_ulonglong(cast_float_to_ulonglong(9223371487098961920.0f), 9223371487098961920ull); // 0x7FFFFF8000000000 |
158 | 152 | ok_eq_ulonglong(cast_float_to_ulonglong(9223372036854775808.0f), 9223372036854775808ull); // 0x8000000000000000 |
159 | 153 | ok_eq_ulonglong(cast_float_to_ulonglong(18446743523953737727.9f), 18446742974197923840ull); // 0xFFFFFF0000000000 |
160 | | - todo_gcc ok_eq_ulonglong(cast_float_to_ulonglong(18446743523953737728.0f), ULONGLONG_OVERFLOW); // 0x8000000000000000 / 0xFFFFFFFFFFFFFFFF |
161 | | - todo_gcc ok_eq_ulonglong(cast_float_to_ulonglong(20000000000000000000.0f), ULONGLONG_OVERFLOW); // 0x8000000000000000 / 0xFFFFFFFFFFFFFFFF |
| 154 | +#ifndef __GNUC__ // GCC inlines the conversion, we cannot fix this |
| 155 | + ok_eq_ulonglong(cast_float_to_ulonglong(18446743523953737728.0f), ULONGLONG_OVERFLOW); // 0x8000000000000000 / 0xFFFFFFFFFFFFFFFF |
| 156 | + ok_eq_ulonglong(cast_float_to_ulonglong(20000000000000000000.0f), ULONGLONG_OVERFLOW); // 0x8000000000000000 / 0xFFFFFFFFFFFFFFFF |
| 157 | +#endif |
162 | 158 |
|
163 | 159 | // float to unsigned long long cast (negative values) |
164 | 160 | ok_eq_ulonglong(cast_float_to_ulonglong(-0.0f), 0ull); |
@@ -245,9 +241,11 @@ void Test_double(void) |
245 | 241 | ok_eq_ulonglong(cast_double_to_ulonglong(9223372036854774784.0), 9223372036854774784ull); // 0x7FFFFFFFFFFFFC00 |
246 | 242 | ok_eq_ulonglong(cast_double_to_ulonglong(9223372036854775808.0), 9223372036854775808ull); // 0x8000000000000000 |
247 | 243 | ok_eq_ulonglong(cast_double_to_ulonglong(18446744073709550591.9), 18446744073709549568ull); // 0xFFFFFFFFFFFFF800 |
248 | | - todo_gcc ok_eq_ulonglong(cast_double_to_ulonglong(18446744073709550592.0), ULONGLONG_OVERFLOW); // 0x8000000000000000 / 0xFFFFFFFFFFFFFFFF |
249 | | - todo_gcc ok_eq_ulonglong(cast_double_to_ulonglong(18446744073709551616.0), ULONGLONG_OVERFLOW); // 0x8000000000000000 / 0xFFFFFFFFFFFFFFFF |
250 | | - todo_gcc ok_eq_ulonglong(cast_double_to_ulonglong(20000000000000000000.0), ULONGLONG_OVERFLOW); // 0x8000000000000000 / 0xFFFFFFFFFFFFFFFF |
| 244 | +#ifndef __GNUC__ // GCC inlines the conversion, we cannot fix this |
| 245 | + ok_eq_ulonglong(cast_double_to_ulonglong(18446744073709550592.0), ULONGLONG_OVERFLOW); // 0x8000000000000000 / 0xFFFFFFFFFFFFFFFF |
| 246 | + ok_eq_ulonglong(cast_double_to_ulonglong(18446744073709551616.0), ULONGLONG_OVERFLOW); // 0x8000000000000000 / 0xFFFFFFFFFFFFFFFF |
| 247 | + ok_eq_ulonglong(cast_double_to_ulonglong(20000000000000000000.0), ULONGLONG_OVERFLOW); // 0x8000000000000000 / 0xFFFFFFFFFFFFFFFF |
| 248 | +#endif |
251 | 249 |
|
252 | 250 | // float to unsigned long long cast (negative values) |
253 | 251 | ok_eq_ulonglong(cast_double_to_ulonglong(-0.0), 0ull); |
|
0 commit comments