|
34 | 34 | #include <windows.h>
|
35 | 35 | #endif
|
36 | 36 |
|
37 |
| -#if defined(__MINGW32__) && defined(__MSVCRT_VERSION__) && __MSVCRT_VERSION__ < 0xE00 && defined(__USE_MINGW_ANSI_STDIO) && __USE_MINGW_ANSI_STDIO == 0 |
| 37 | +#if defined(__MINGW32__) && defined(__MSVCRT_VERSION__) && __MSVCRT_VERSION__ < 0xE00 |
| 38 | +#define MSVCRT_DLL |
| 39 | +#endif |
| 40 | +#if defined(MSVCRT_DLL) && defined(__USE_MINGW_ANSI_STDIO) && __USE_MINGW_ANSI_STDIO == 0 |
38 | 41 | #define MSVCRT_DLL_NOANSI
|
39 | 42 | #endif
|
40 | 43 |
|
@@ -1132,17 +1135,25 @@ void test_math_inspect_manipulate() {
|
1132 | 1135 |
|
1133 | 1136 | int iret;
|
1134 | 1137 | #define TEST_FREXP(frexp) \
|
1135 |
| - TEST_FLT(frexp(F(INFINITY), &iret), INFINITY); \ |
1136 |
| - TEST_FLT(frexp(F(-INFINITY), &iret), -INFINITY); \ |
1137 | 1138 | TEST_FLT_NAN(frexp(F(NAN), &iret), F(NAN)); \
|
1138 | 1139 | TEST_FLT_NAN(frexp(-F(NAN), &iret), -F(NAN)); \
|
1139 | 1140 | iret = 0; \
|
1140 | 1141 | TEST_FLT(frexp(F(0x1.4p+42), &iret), 0.625); \
|
1141 | 1142 | TEST_INT(iret, 43)
|
1142 | 1143 |
|
| 1144 | +#define TEST_FREXP_INF(frexp) \ |
| 1145 | + TEST_FLT(frexp(F(INFINITY), &iret), INFINITY); \ |
| 1146 | + TEST_FLT(frexp(F(-INFINITY), &iret), -INFINITY) |
| 1147 | + |
1143 | 1148 | TEST_FREXP(frexp);
|
1144 | 1149 | TEST_FREXP(frexpf);
|
1145 | 1150 | TEST_FREXP(frexpl);
|
| 1151 | +#if !defined(MSVCRT_DLL) || !(defined(__arm__) || defined(__aarch64__)) |
| 1152 | + // On msvcrt.dll on arm, frexp*(INFINITY) returns NAN, not INFINITY. |
| 1153 | + TEST_FREXP_INF(frexp); |
| 1154 | + TEST_FREXP_INF(frexpf); |
| 1155 | + TEST_FREXP_INF(frexpl); |
| 1156 | +#endif |
1146 | 1157 |
|
1147 | 1158 | #define TEST_ILOGB(ilogb) \
|
1148 | 1159 | TEST_INT(ilogb(F(1.0)), 0); \
|
|
0 commit comments