From: Jonathan Wakely <jwakely@redhat.com>
To: libstdc++@gcc.gnu.org, gcc-patches@gcc.gnu.org
Subject: [committed] libstdc++: Add separate autoconf macro for std::float_t and std::double_t [PR109818]
Date: Wed, 31 May 2023 21:20:54 +0100 [thread overview]
Message-ID: <20230531202054.20950-1-jwakely@redhat.com> (raw)
Tested x86_64-linux. Pushed to trunk.
-- >8 --
This should make it possible to use openlibm with djgpp (and other
targets with missing C99 <math.h> functions). The <math.h> from openlibm
provides all the functions, but not the float_t and double_t typedefs.
By separating the autoconf checks for the functionsand the typedefs, we
don't disable support for all the functions just because those typedefs
are not present.
libstdc++-v3/ChangeLog:
PR libstdc++/109818
* acinclude.m4 (GLIBCXX_ENABLE_C99): Add separate check for
float_t and double_t and define HAVE_C99_FLT_EVAL_TYPES.
* config.h.in: Regenerate.
* configure: Regenerate.
* include/c_global/cmath (float_t, double_t): Guard using new
_GLIBCXX_HAVE_C99_FLT_EVAL_TYPES macro.
---
libstdc++-v3/acinclude.m4 | 21 ++++++++++++---
libstdc++-v3/config.h.in | 4 +++
libstdc++-v3/configure | 41 ++++++++++++++++++++++++++---
libstdc++-v3/include/c_global/cmath | 2 ++
4 files changed, 62 insertions(+), 6 deletions(-)
diff --git a/libstdc++-v3/acinclude.m4 b/libstdc++-v3/acinclude.m4
index 66194071b20..6ae141b8c20 100644
--- a/libstdc++-v3/acinclude.m4
+++ b/libstdc++-v3/acinclude.m4
@@ -1273,13 +1273,28 @@ AC_DEFUN([GLIBCXX_ENABLE_C99], [
in <cmath> in namespace std for C++11.])
fi
- # Check for the existence of <math.h> functions.
- AC_CACHE_CHECK([for ISO C99 function support for C++11 in <math.h>],
- glibcxx_cv_c99_math_funcs, [
+ # Check for the existence of <math.h> typedefs.
+ AC_CACHE_CHECK([for ISO C99 float types for C++11 in <math.h>],
+ glibcxx_cv_c99_flt_eval_types, [
AC_TRY_COMPILE([#include <math.h>],
[// Types
typedef double_t my_double_t;
typedef float_t my_float_t;
+ ],
+ [glibcxx_cv_c99_flt_eval_types=yes],
+ [glibcxx_cv_c99_flt_eval_types=no])
+ ])
+ if test x"$glibcxx_cv_c99_flt_eval_types" = x"yes"; then
+ AC_DEFINE(HAVE_C99_FLT_EVAL_TYPES, 1,
+ [Define if C99 float_t and double_t in <math.h> should be
+ imported in <cmath> in namespace std for C++11.])
+ fi
+
+ # Check for the existence of <math.h> functions.
+ AC_CACHE_CHECK([for ISO C99 function support for C++11 in <math.h>],
+ glibcxx_cv_c99_math_funcs, [
+ AC_TRY_COMPILE([#include <math.h>],
+ [
// Hyperbolic
acosh(0.0);
acoshf(0.0f);
diff --git a/libstdc++-v3/config.h.in b/libstdc++-v3/config.h.in
index 4fbf5ef86b9..5a95853cbbe 100644
--- a/libstdc++-v3/config.h.in
+++ b/libstdc++-v3/config.h.in
@@ -42,6 +42,10 @@
/* Define to 1 if you have the `at_quick_exit' function. */
#undef HAVE_AT_QUICK_EXIT
+/* Define if C99 float_t and double_t in <math.h> should be imported in
+ <cmath> in namespace std for C++11. */
+#undef HAVE_C99_FLT_EVAL_TYPES
+
/* Define to 1 if the target assembler supports thread-local storage. */
#undef HAVE_CC_TLS
diff --git a/libstdc++-v3/configure b/libstdc++-v3/configure
index ba328a64be2..70d169cf64b 100755
--- a/libstdc++-v3/configure
+++ b/libstdc++-v3/configure
@@ -18275,6 +18275,43 @@ $as_echo "#define _GLIBCXX11_USE_C99_MATH 1" >>confdefs.h
fi
+ # Check for the existence of <math.h> typedefs.
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ISO C99 float types for C++11 in <math.h>" >&5
+$as_echo_n "checking for ISO C99 float types for C++11 in <math.h>... " >&6; }
+if ${glibcxx_cv_c99_flt_eval_types+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <math.h>
+int
+main ()
+{
+// Types
+ typedef double_t my_double_t;
+ typedef float_t my_float_t;
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+ glibcxx_cv_c99_flt_eval_types=yes
+else
+ glibcxx_cv_c99_flt_eval_types=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $glibcxx_cv_c99_flt_eval_types" >&5
+$as_echo "$glibcxx_cv_c99_flt_eval_types" >&6; }
+ if test x"$glibcxx_cv_c99_flt_eval_types" = x"yes"; then
+
+$as_echo "#define HAVE_C99_FLT_EVAL_TYPES 1" >>confdefs.h
+
+ fi
+
# Check for the existence of <math.h> functions.
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ISO C99 function support for C++11 in <math.h>" >&5
$as_echo_n "checking for ISO C99 function support for C++11 in <math.h>... " >&6; }
@@ -18288,9 +18325,7 @@ else
int
main ()
{
-// Types
- typedef double_t my_double_t;
- typedef float_t my_float_t;
+
// Hyperbolic
acosh(0.0);
acoshf(0.0f);
diff --git a/libstdc++-v3/include/c_global/cmath b/libstdc++-v3/include/c_global/cmath
index c80ee7c8d72..b0ba395eb5c 100644
--- a/libstdc++-v3/include/c_global/cmath
+++ b/libstdc++-v3/include/c_global/cmath
@@ -1877,9 +1877,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
#undef truncf
#undef truncl
+#ifdef _GLIBCXX_HAVE_C99_FLT_EVAL_TYPES
// types
using ::double_t;
using ::float_t;
+#endif
// functions
using ::acosh;
--
2.40.1
reply other threads:[~2023-05-31 20:20 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20230531202054.20950-1-jwakely@redhat.com \
--to=jwakely@redhat.com \
--cc=gcc-patches@gcc.gnu.org \
--cc=libstdc++@gcc.gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).