math: raise invalid flag in ilogb*.c on +-0, +-inf and nan
[musl] / src / math / ilogbl.c
index ed9ddcb..1512934 100644 (file)
@@ -14,15 +14,19 @@ int ilogbl(long double x)
        int e = u.bits.exp;
 
        if (!e) {
        int e = u.bits.exp;
 
        if (!e) {
-               if (m == 0)
+               if (m == 0) {
+                       FORCE_EVAL(0/0.0f);
                        return FP_ILOGB0;
                        return FP_ILOGB0;
+               }
                /* subnormal x */
                for (e = -0x3fff+1; m < (uint64_t)1<<63; e--, m<<=1);
                return e;
        }
                /* subnormal x */
                for (e = -0x3fff+1; m < (uint64_t)1<<63; e--, m<<=1);
                return e;
        }
-       if (e == 0x7fff)
+       if (e == 0x7fff) {
+               FORCE_EVAL(0/0.0f);
                /* in ld80 msb is set in inf */
                return m & (uint64_t)-1>>1 ? FP_ILOGBNAN : INT_MAX;
                /* in ld80 msb is set in inf */
                return m & (uint64_t)-1>>1 ? FP_ILOGBNAN : INT_MAX;
+       }
        return e - 0x3fff;
 }
 #endif
        return e - 0x3fff;
 }
 #endif