[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
isnanf, isnand, isnanl: Fix link errors on AIX 7.1 with xlc
From: |
Bruno Haible |
Subject: |
isnanf, isnand, isnanl: Fix link errors on AIX 7.1 with xlc |
Date: |
Sun, 02 Jun 2024 18:37:57 +0200 |
In a testdir for modules totalorder, totalorderf, totalorderl on AIX 7.1
with xlc, I see these link errors:
xlc -q64 -qthreaded -qtls -g -L/home/haible/prefix64/lib -o
test-isnand-nolibm test-isnand-nolibm.o libtests.a ../gllib/libgnu.a libtests.a
../gllib/libgnu.a libtests.a
ld: 0711-317 ERROR: Undefined symbol: ._isnan
ld: 0711-345 Use the -bloadmap or -bnoquiet option to obtain more information.
gmake[4]: *** [Makefile:1821: test-isnand-nolibm] Error 8
xlc -q64 -qthreaded -qtls -g -L/home/haible/prefix64/lib -o
test-isnanf-nolibm test-isnanf-nolibm.o libtests.a ../gllib/libgnu.a libtests.a
../gllib/libgnu.a libtests.a
ld: 0711-317 ERROR: Undefined symbol: ._isnanf
ld: 0711-345 Use the -bloadmap or -bnoquiet option to obtain more information.
gmake[4]: *** [Makefile:1829: test-isnanf-nolibm] Error 8
xlc -q64 -qthreaded -qtls -g -L/home/haible/prefix64/lib -o
test-isnanl-nolibm test-isnanl-nolibm.o libtests.a ../gllib/libgnu.a libtests.a
../gllib/libgnu.a libtests.a
ld: 0711-317 ERROR: Undefined symbol: ._isnan
ld: 0711-345 Use the -bloadmap or -bnoquiet option to obtain more information.
gmake[4]: *** [Makefile:1837: test-isnanl-nolibm] Error 8
The cause it that <math.h> undoes the macro definitions done by
isnan?-nolibm.h.
This patch fixes it.
2024-06-02 Bruno Haible <bruno@clisp.org>
isnanf, isnand, isnanl: Fix link errors on AIX 7.1 with xlc.
* lib/isnanf-nolibm.h (HAVE_ISNANF_NOLIBM): New macro.
* lib/isnand-nolibm.h (HAVE_ISNAND_NOLIBM): New macro.
* lib/isnanl-nolibm.h (HAVE_ISNANL_NOLIBM): New macro.
* lib/math.h (isnanf): Don't define via isnan if HAVE_ISNANF_NOLIBM is
defined.
(isnand): Don't define via isnan if HAVE_ISNAND_NOLIBM is defined.
(isnanl): Don't define via isnan if HAVE_ISNANL_NOLIBM is defined.
diff --git a/lib/isnand-nolibm.h b/lib/isnand-nolibm.h
index 925e71d17a..1a0f27b412 100644
--- a/lib/isnand-nolibm.h
+++ b/lib/isnand-nolibm.h
@@ -40,3 +40,6 @@ extern
# endif
int isnand (double x);
#endif
+
+/* Tell <math.h> that our isnand does not need libm. */
+#define HAVE_ISNAND_NOLIBM 1
diff --git a/lib/isnanf-nolibm.h b/lib/isnanf-nolibm.h
index 06f0cbb70d..d004bbe8fe 100644
--- a/lib/isnanf-nolibm.h
+++ b/lib/isnanf-nolibm.h
@@ -52,3 +52,6 @@ extern
# endif
int isnanf (float x);
#endif
+
+/* Tell <math.h> that our isnanf does not need libm. */
+#define HAVE_ISNANF_NOLIBM 1
diff --git a/lib/isnanl-nolibm.h b/lib/isnanl-nolibm.h
index 0b6755cd82..f0219dea88 100644
--- a/lib/isnanl-nolibm.h
+++ b/lib/isnanl-nolibm.h
@@ -41,3 +41,6 @@ extern
# endif
int isnanl (long double x);
#endif
+
+/* Tell <math.h> that our isnanl does not need libm. */
+#define HAVE_ISNANL_NOLIBM 1
diff --git a/lib/math.in.h b/lib/math.in.h
index 96d0da44fd..a1ae4e7328 100644
--- a/lib/math.in.h
+++ b/lib/math.in.h
@@ -2557,7 +2557,7 @@ _GL_EXTERN_C int isnanf (float x);
GCC >= 4.0 also provides __builtin_isnanf, but clang doesn't. */
# undef isnanf
# define isnanf(x) __builtin_isnan ((float)(x))
-# elif defined isnan
+# elif defined isnan && !defined HAVE_ISNANF_NOLIBM
# undef isnanf
# define isnanf(x) isnan ((float)(x))
# endif
@@ -2586,7 +2586,7 @@ _GL_EXTERN_C int isnand (double x);
/* GCC >= 4.0 and clang provide a type-generic built-in for isnan. */
# undef isnand
# define isnand(x) __builtin_isnan ((double)(x))
-# else
+# elif !defined HAVE_ISNAND_NOLIBM
# undef isnand
# define isnand(x) isnan ((double)(x))
# endif
@@ -2609,7 +2609,7 @@ _GL_EXTERN_C int isnand (double x);
GCC >= 4.0 also provides __builtin_isnanl, but clang doesn't. */
# undef isnanl
# define isnanl(x) __builtin_isnan ((long double)(x))
-# elif defined isnan
+# elif defined isnan && !defined HAVE_ISNANL_NOLIBM
# undef isnanl
# define isnanl(x) isnan ((long double)(x))
# endif
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- isnanf, isnand, isnanl: Fix link errors on AIX 7.1 with xlc,
Bruno Haible <=