[PATCH] math: Fix errno setting for narrowing sqrt functions on underflow [BZ #33393]
Osama Abdelkader
osama.abdelkader@gmail.com
Sun Oct 19 15:11:43 GMT 2025
The CHECK_NARROW_SQRT macro in math-narrow.h was not setting errno to
ERANGE when an underflow exception occurred during narrowing square root
operations. While the FE_UNDERFLOW exception flag was correctly set, errno
remained unchanged, violating IEEE 754 and POSIX requirements.
This fix adds a check for the FE_UNDERFLOW exception after computing the
result. When underflow is detected via fetestexcept(FE_UNDERFLOW), errno
is now properly set to ERANGE.
The issue affects all narrowing square root functions that use this macro:
- fsqrt (double to float)
- fsqrtl (long double to float)
- dsqrtl (long double to double)
Tested on x86_64-linux-gnu. All tests pass including the new test case
that verifies errno is set correctly on underflow conditions.
Signed-off-by: Osama Abdelkader <osama.abdelkader@gmail.com>
---
math/math-narrow.h | 2 ++
1 file changed, 2 insertions(+)
diff --git a/math/math-narrow.h b/math/math-narrow.h
index 2f27b736fd..89bbcc26f1 100644
--- a/math/math-narrow.h
+++ b/math/math-narrow.h
@@ -307,6 +307,8 @@
} \
else if ((RET) == 0 && (X) != 0) \
__set_errno (ERANGE); \
+ else if (fetestexcept (FE_UNDERFLOW)) \
+ __set_errno (ERANGE); \
} \
while (0)
--
2.43.0
More information about the Libc-alpha
mailing list