ISO C99 support in <math.h> for C++98

Yaakov Selkowitz yselkowitz@cygwin.com
Wed Mar 23 04:58:00 GMT 2016


On 2016-03-22 13:53, Yaakov Selkowitz wrote:
> There's nothing wrong with -std=gnu++98.  The problem is with configure
> testing C99 macros with -std=c++98, which makes no sense and only works
> on glibc because they use -D_GNU_SOURCE indiscriminately with g++.  Fix
> those configure tests to use -std=c++11, as we did on Cygwin, and the
> features should be enabled.

The attached patches for GCC enable _GLIBCXX_USE_C99 support with the 
current feature test macros.

-- 
Yaakov
-------------- next part --------------
--- origsrc/gcc-5.3.0/libstdc++-v3/acinclude.m4	2015-11-24 07:25:07.000000000 -0600
+++ src/gcc-5.3.0/libstdc++-v3/acinclude.m4	2016-03-22 14:04:56.933798100 -0500
@@ -919,13 +919,11 @@ AC_DEFUN([GLIBCXX_ENABLE_C99], [
   AC_LANG_SAVE
   AC_LANG_CPLUSPLUS
 
-  # Use -std=c++98 because the default (-std=gnu++98) leaves __STRICT_ANSI__
+  # Use -std=c++11 because the default (-std=gnu++98) leaves __STRICT_ANSI__
   # undefined and fake C99 facilities - like pre-standard snprintf - may be
   # spuriously enabled.
-  # Long term, -std=c++0x could be even better, could manage to explicitly
-  # request C99 facilities to the underlying C headers.
   ac_save_CXXFLAGS="$CXXFLAGS"
-  CXXFLAGS="$CXXFLAGS -std=c++98"
+  CXXFLAGS="$CXXFLAGS -std=c++11"
   ac_save_LIBS="$LIBS"
   ac_save_gcc_no_link="$gcc_no_link"
 
@@ -1128,7 +1126,6 @@ AC_DEFUN([GLIBCXX_ENABLE_C99], [
 
   # Option parsed, now set things appropriately.
   if test x"$glibcxx_cv_c99_math" = x"no" ||
-     test x"$glibcxx_cv_c99_complex" = x"no" ||
      test x"$glibcxx_cv_c99_stdio" = x"no" ||
      test x"$glibcxx_cv_c99_stdlib" = x"no" ||
      test x"$glibcxx_cv_c99_wchar" = x"no"; then
@@ -1136,7 +1133,7 @@ AC_DEFUN([GLIBCXX_ENABLE_C99], [
   else
     AC_DEFINE(_GLIBCXX_USE_C99, 1,
     [Define if C99 functions or macros from <wchar.h>, <math.h>,
-    <complex.h>, <stdio.h>, and <stdlib.h> can be used or exposed.])
+    <stdio.h>, and <stdlib.h> can be used or exposed.])
   fi
 
   gcc_no_link="$ac_save_gcc_no_link"
@@ -1445,10 +1442,10 @@ AC_DEFUN([GLIBCXX_CHECK_C99_TR1], [
   AC_LANG_SAVE
   AC_LANG_CPLUSPLUS
 
-  # Use -std=c++98 because the default (-std=gnu++98) leaves __STRICT_ANSI__
+  # Use -std=c++11 because the default (-std=gnu++98) leaves __STRICT_ANSI__
   # undefined and fake C99 facilities may be spuriously enabled.
   ac_save_CXXFLAGS="$CXXFLAGS"
-  CXXFLAGS="$CXXFLAGS -std=c++98"
+  CXXFLAGS="$CXXFLAGS -std=c++11"
 
   # Check for the existence of <complex.h> complex math functions used
   # by tr1/complex.
--- origsrc/gcc-5.3.0/libstdc++-v3/config.h.in	2015-11-24 07:25:07.000000000 -0600
+++ src/gcc-5.3.0/libstdc++-v3/config.h.in	2016-03-22 15:14:43.352905800 -0500
@@ -783,8 +783,8 @@
 /* Define to use Sun versioning in the shared library. */
 #undef _GLIBCXX_SYMVER_SUN
 
-/* Define if C99 functions or macros from <wchar.h>, <math.h>, <complex.h>,
-   <stdio.h>, and <stdlib.h> can be used or exposed. */
+/* Define if C99 functions or macros from <wchar.h>, <math.h>, <stdio.h>,
+   and <stdlib.h> can be used or exposed. */
 #undef _GLIBCXX_USE_C99
 
 /* Define if C99 functions in <complex.h> should be used in <complex>. Using
--- origsrc/gcc-5.3.0/libstdc++-v3/configure	2015-11-26 07:51:04.000000000 -0600
+++ src/gcc-5.3.0/libstdc++-v3/configure	2016-03-22 23:47:32.556098400 -0500
@@ -16640,13 +16640,11 @@ ac_link='$CXX -o conftest$ac_exeext $CXX
 ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
 
 
-  # Use -std=c++98 because the default (-std=gnu++98) leaves __STRICT_ANSI__
+  # Use -std=c++11 because the default (-std=gnu++98) leaves __STRICT_ANSI__
   # undefined and fake C99 facilities - like pre-standard snprintf - may be
   # spuriously enabled.
-  # Long term, -std=c++0x could be even better, could manage to explicitly
-  # request C99 facilities to the underlying C headers.
   ac_save_CXXFLAGS="$CXXFLAGS"
-  CXXFLAGS="$CXXFLAGS -std=c++98"
+  CXXFLAGS="$CXXFLAGS -std=c++11"
   ac_save_LIBS="$LIBS"
   ac_save_gcc_no_link="$gcc_no_link"
 
@@ -17270,7 +17268,6 @@ $as_echo "$glibcxx_cv_c99_wchar" >&6; }
 
   # Option parsed, now set things appropriately.
   if test x"$glibcxx_cv_c99_math" = x"no" ||
-     test x"$glibcxx_cv_c99_complex" = x"no" ||
      test x"$glibcxx_cv_c99_stdio" = x"no" ||
      test x"$glibcxx_cv_c99_stdlib" = x"no" ||
      test x"$glibcxx_cv_c99_wchar" = x"no"; then
@@ -18884,10 +18881,10 @@ ac_link='$CXX -o conftest$ac_exeext $CXX
 ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
 
 
-  # Use -std=c++98 because the default (-std=gnu++98) leaves __STRICT_ANSI__
+  # Use -std=c++11 because the default (-std=gnu++98) leaves __STRICT_ANSI__
   # undefined and fake C99 facilities may be spuriously enabled.
   ac_save_CXXFLAGS="$CXXFLAGS"
-  CXXFLAGS="$CXXFLAGS -std=c++98"
+  CXXFLAGS="$CXXFLAGS -std=c++11"
 
   # Check for the existence of <complex.h> complex math functions used
   # by tr1/complex.
-------------- next part --------------
--- origsrc/gcc-5.3.0/libstdc++-v3/configure	2015-11-26 07:51:04.000000000 -0600
+++ src/gcc-5.3.0/libstdc++-v3/configure	2016-03-22 23:47:32.556098400 -0500
@@ -27940,12 +27937,15 @@ else
   # on a hosted environment.
   if test "x${with_newlib}" = "xyes"; then
     os_include_dir="os/newlib"
-    $as_echo "#define HAVE_HYPOT 1" >>confdefs.h
+    # GLIBCXX_CHECK_STDLIB_SUPPORT
+    $as_echo "#define HAVE_AT_QUICK_EXIT 1" >>confdefs.h
 
+    $as_echo "#define HAVE_QUICK_EXIT 1" >>confdefs.h
 
-    # GLIBCXX_CHECK_STDLIB_SUPPORT
     $as_echo "#define HAVE_STRTOF 1" >>confdefs.h
 
+    $as_echo "#define HAVE_STRTOLD 1" >>confdefs.h
+
 
     $as_echo "#define HAVE_ACOSF 1" >>confdefs.h
 
@@ -27965,22 +27965,44 @@ else
 
     $as_echo "#define HAVE_FABSF 1" >>confdefs.h
 
+    $as_echo "#define HAVE_FINITE 1" >>confdefs.h
+
+    $as_echo "#define HAVE_FINITEF 1" >>confdefs.h
+
     $as_echo "#define HAVE_FLOORF 1" >>confdefs.h
 
     $as_echo "#define HAVE_FMODF 1" >>confdefs.h
 
     $as_echo "#define HAVE_FREXPF 1" >>confdefs.h
 
+    $as_echo "#define HAVE_HYPOT 1" >>confdefs.h
+
+    $as_echo "#define HAVE_HYPOTF 1" >>confdefs.h
+
+    $as_echo "#define HAVE_ISINF 1" >>confdefs.h
+
+    $as_echo "#define HAVE_ISINFF 1" >>confdefs.h
+
+    $as_echo "#define HAVE_ISNAN 1" >>confdefs.h
+
+    $as_echo "#define HAVE_ISNANF 1" >>confdefs.h
+
     $as_echo "#define HAVE_LDEXPF 1" >>confdefs.h
 
     $as_echo "#define HAVE_LOG10F 1" >>confdefs.h
 
     $as_echo "#define HAVE_LOGF 1" >>confdefs.h
 
+    $as_echo "#define HAVE_MODF 1" >>confdefs.h
+
     $as_echo "#define HAVE_MODFF 1" >>confdefs.h
 
     $as_echo "#define HAVE_POWF 1" >>confdefs.h
 
+    $as_echo "#define HAVE_SINCOS 1" >>confdefs.h
+
+    $as_echo "#define HAVE_SINCOSF 1" >>confdefs.h
+
     $as_echo "#define HAVE_SINF 1" >>confdefs.h
 
     $as_echo "#define HAVE_SINHF 1" >>confdefs.h
--- origsrc/gcc-5.3.0/libstdc++-v3/configure.ac	2015-11-24 07:25:07.000000000 -0600
+++ src/gcc-5.3.0/libstdc++-v3/configure.ac	2016-03-22 23:43:14.621844900 -0500
@@ -294,10 +294,11 @@ else
   # on a hosted environment.
   if test "x${with_newlib}" = "xyes"; then
     os_include_dir="os/newlib"
-    AC_DEFINE(HAVE_HYPOT)
-
     # GLIBCXX_CHECK_STDLIB_SUPPORT
+    AC_DEFINE(HAVE_AT_QUICK_EXIT)
+    AC_DEFINE(HAVE_QUICK_EXIT)
     AC_DEFINE(HAVE_STRTOF)
+    AC_DEFINE(HAVE_STRTOLD)
 
     AC_DEFINE(HAVE_ACOSF)
     AC_DEFINE(HAVE_ASINF)
@@ -308,14 +309,25 @@ else
     AC_DEFINE(HAVE_COSHF)
     AC_DEFINE(HAVE_EXPF)
     AC_DEFINE(HAVE_FABSF)
+    AC_DEFINE(HAVE_FINITE)
+    AC_DEFINE(HAVE_FINITEF)
     AC_DEFINE(HAVE_FLOORF)
     AC_DEFINE(HAVE_FMODF)
     AC_DEFINE(HAVE_FREXPF)
+    AC_DEFINE(HAVE_HYPOT)
+    AC_DEFINE(HAVE_HYPOTF)
+    AC_DEFINE(HAVE_ISINF)
+    AC_DEFINE(HAVE_ISINFF)
+    AC_DEFINE(HAVE_ISNAN)
+    AC_DEFINE(HAVE_ISNANF)
     AC_DEFINE(HAVE_LDEXPF)
     AC_DEFINE(HAVE_LOG10F)
     AC_DEFINE(HAVE_LOGF)
+    AC_DEFINE(HAVE_MODF)
     AC_DEFINE(HAVE_MODFF)
     AC_DEFINE(HAVE_POWF)
+    AC_DEFINE(HAVE_SINCOS)
+    AC_DEFINE(HAVE_SINCOSF)
     AC_DEFINE(HAVE_SINF)
     AC_DEFINE(HAVE_SINHF)
     AC_DEFINE(HAVE_SQRTF)


More information about the Newlib mailing list