[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