catch invalid ld80 bit patterns and treat them as nan
[musl] / src / math / __fpclassifyl.c
index 4f93bef..4f4f37a 100644 (file)
@@ -7,10 +7,10 @@ int __fpclassifyl(long double __x)
        union {
                long double __ld;
                __uint16_t __hw[5];
-               __uint64_t __m;
+               __int64_t __m;
        } __y = { __x };
        int __ee = __y.__hw[4]&0x7fff;
        if (!__ee) return __y.__m ? FP_SUBNORMAL : FP_ZERO;
        if (__ee==0x7fff) return __y.__m ? FP_NAN : FP_INFINITE;
-       return FP_NORMAL;
+       return __y.__m < 0 ? FP_NORMAL : FP_NAN;
 }