[PATCH 12/15] math: Fix log10 template for inputs less than 0
Adhemerval Zanella
adhemerval.zanella@linaro.org
Wed Mar 27 16:45:24 GMT 2024
The template is used by some ABIs for the static build, and it
fails to correct set the floating exceptions if the argument is
less than 0.
Checked on x86_64-linux-gnu.
---
math/Makefile | 1 +
math/w_log10_template.c | 16 ++++++++++++----
2 files changed, 13 insertions(+), 4 deletions(-)
diff --git a/math/Makefile b/math/Makefile
index 2b2683a9fa..aa57171f77 100644
--- a/math/Makefile
+++ b/math/Makefile
@@ -370,6 +370,7 @@ $(libm-test-c-narrow-obj): $(objpfx)libm-test%.c: libm-test%.inc \
libm-test-funcs-auto-static = \
acos \
exp10 \
+ log10 \
# libm-test-funcs-auto-static
libm-test-funcs-noauto-static = \
copysign \
diff --git a/math/w_log10_template.c b/math/w_log10_template.c
index aca38d4e1e..cc7b503f01 100644
--- a/math/w_log10_template.c
+++ b/math/w_log10_template.c
@@ -32,11 +32,19 @@ M_DECL_FUNC (__log10) (FLOAT x)
if (__glibc_unlikely (islessequal (x, M_LIT (0.0))))
{
if (x == 0)
- /* Pole error: log10(0). */
- __set_errno (ERANGE);
+ {
+ /* Pole error: log10(0). */
+ __feraiseexcept (FE_DIVBYZERO);
+ __set_errno (ERANGE);
+ return -INFINITY;
+ }
else
- /* Domain error: log10(<0). */
- __set_errno (EDOM);
+ {
+ /* Domain error: log10(<0). */
+ __feraiseexcept (FE_INVALID);
+ __set_errno (EDOM);
+ return NAN;
+ }
}
return M_SUF (__ieee754_log10) (x);
}
--
2.34.1
More information about the Libc-alpha
mailing list