libstdc++: Stop using TR1 macros in <cctype> and <cfenv>
As with the two commits before this, the _GLIBCXX_USE_C99_CTYPE_TR1 and _GLIBCXX_USE_C99_FENV_TR1 macros are misleading when they are also used for <cctype> and <cfenv>, not only for TR1 headers. It is also wrong, because the configure checks for TR1 use -std=c++98 and a target might define the C99 features for C++11 but not for C++98. Add separate configure checks for the <ctype.h> and <fenv.h> features using -std=c++11 for the checks. Use the new macros defined by those checks in the C++11-specific parts of <cctype>, <cfenv>, and <fenv.h>. libstdc++-v3/ChangeLog: * acinclude.m4 (GLIBCXX_USE_C99): Check for isblank in C++11 mode and define _GLIBCXX_USE_C99_CTYPE. Check for <fenv.h> functions in C++11 mode and define _GLIBCXX_USE_C99_FENV. * config.h.in: Regenerate. * configure: Regenerate. * include/c_compatibility/fenv.h: Check _GLIBCXX_USE_C99_FENV instead of _GLIBCXX_USE_C99_FENV_TR1. * include/c_global/cfenv: Likewise. * include/c_global/cctype: Check _GLIBCXX_USE_C99_CTYPE instead of _GLIBCXX_USE_C99_CTYPE_TR1.
This commit is contained in:
parent
5baabdb15d
commit
ac3a5bbc62
6 changed files with 157 additions and 6 deletions
|
@ -1476,6 +1476,52 @@ AC_DEFUN([GLIBCXX_ENABLE_C99], [
|
|||
fi
|
||||
fi
|
||||
|
||||
# Check for the existence of <ctype.h> functions.
|
||||
AC_CACHE_CHECK([for ISO C99 support for C++11 in <ctype.h>],
|
||||
glibcxx_cv_c99_ctype, [
|
||||
AC_TRY_COMPILE([#include <ctype.h>],
|
||||
[int ch;
|
||||
int ret;
|
||||
ret = isblank(ch);
|
||||
],[glibcxx_cv_c99_ctype=yes],
|
||||
[glibcxx_cv_c99_ctype=no])
|
||||
])
|
||||
if test x"$glibcxx_cv_c99_ctype" = x"yes"; then
|
||||
AC_DEFINE(_GLIBCXX_USE_C99_CTYPE, 1,
|
||||
[Define if C99 functions in <ctype.h> should be imported in
|
||||
<cctype> in namespace std for C++11.])
|
||||
fi
|
||||
|
||||
# Check for the existence of <fenv.h> functions.
|
||||
AC_CHECK_HEADERS(fenv.h, ac_has_fenv_h=yes, ac_has_fenv_h=no)
|
||||
ac_c99_fenv=no;
|
||||
if test x"$ac_has_fenv_h" = x"yes"; then
|
||||
AC_MSG_CHECKING([for ISO C99 support for C++11 in <fenv.h>])
|
||||
AC_TRY_COMPILE([#include <fenv.h>],
|
||||
[int except, mode;
|
||||
fexcept_t* pflag;
|
||||
fenv_t* penv;
|
||||
int ret;
|
||||
ret = feclearexcept(except);
|
||||
ret = fegetexceptflag(pflag, except);
|
||||
ret = feraiseexcept(except);
|
||||
ret = fesetexceptflag(pflag, except);
|
||||
ret = fetestexcept(except);
|
||||
ret = fegetround();
|
||||
ret = fesetround(mode);
|
||||
ret = fegetenv(penv);
|
||||
ret = feholdexcept(penv);
|
||||
ret = fesetenv(penv);
|
||||
ret = feupdateenv(penv);
|
||||
],[ac_c99_fenv=yes], [ac_c99_fenv=no])
|
||||
AC_MSG_RESULT($ac_c99_fenv)
|
||||
fi
|
||||
if test x"$ac_c99_fenv" = x"yes"; then
|
||||
AC_DEFINE(_GLIBCXX_USE_C99_FENV, 1,
|
||||
[Define if C99 functions in <fenv.h> should be imported in
|
||||
<cfenv> in namespace std for C++11.])
|
||||
fi
|
||||
|
||||
gcc_no_link="$ac_save_gcc_no_link"
|
||||
LIBS="$ac_save_LIBS"
|
||||
CXXFLAGS="$ac_save_CXXFLAGS"
|
||||
|
|
|
@ -902,10 +902,18 @@
|
|||
library functions to be present. */
|
||||
#undef _GLIBCXX_USE_C99_COMPLEX_TR1
|
||||
|
||||
/* Define if C99 functions in <ctype.h> should be imported in <cctype> in
|
||||
namespace std for C++11. */
|
||||
#undef _GLIBCXX_USE_C99_CTYPE
|
||||
|
||||
/* Define if C99 functions in <ctype.h> should be imported in <tr1/cctype> in
|
||||
namespace std::tr1. */
|
||||
#undef _GLIBCXX_USE_C99_CTYPE_TR1
|
||||
|
||||
/* Define if C99 functions in <fenv.h> should be imported in <cfenv> in
|
||||
namespace std for C++11. */
|
||||
#undef _GLIBCXX_USE_C99_FENV
|
||||
|
||||
/* Define if C99 functions in <fenv.h> should be imported in <tr1/cfenv> in
|
||||
namespace std::tr1. */
|
||||
#undef _GLIBCXX_USE_C99_FENV_TR1
|
||||
|
|
97
libstdc++-v3/configure
vendored
97
libstdc++-v3/configure
vendored
|
@ -18824,6 +18824,103 @@ $as_echo "#define _GLIBCXX11_USE_C99_WCHAR 1" >>confdefs.h
|
|||
fi
|
||||
fi
|
||||
|
||||
# Check for the existence of <ctype.h> functions.
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ISO C99 support for C++11 in <ctype.h>" >&5
|
||||
$as_echo_n "checking for ISO C99 support for C++11 in <ctype.h>... " >&6; }
|
||||
if ${glibcxx_cv_c99_ctype+:} false; then :
|
||||
$as_echo_n "(cached) " >&6
|
||||
else
|
||||
|
||||
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
|
||||
/* end confdefs.h. */
|
||||
#include <ctype.h>
|
||||
int
|
||||
main ()
|
||||
{
|
||||
int ch;
|
||||
int ret;
|
||||
ret = isblank(ch);
|
||||
|
||||
;
|
||||
return 0;
|
||||
}
|
||||
_ACEOF
|
||||
if ac_fn_cxx_try_compile "$LINENO"; then :
|
||||
glibcxx_cv_c99_ctype=yes
|
||||
else
|
||||
glibcxx_cv_c99_ctype=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_ctype" >&5
|
||||
$as_echo "$glibcxx_cv_c99_ctype" >&6; }
|
||||
if test x"$glibcxx_cv_c99_ctype" = x"yes"; then
|
||||
|
||||
$as_echo "#define _GLIBCXX_USE_C99_CTYPE 1" >>confdefs.h
|
||||
|
||||
fi
|
||||
|
||||
# Check for the existence of <fenv.h> functions.
|
||||
for ac_header in fenv.h
|
||||
do :
|
||||
ac_fn_cxx_check_header_mongrel "$LINENO" "fenv.h" "ac_cv_header_fenv_h" "$ac_includes_default"
|
||||
if test "x$ac_cv_header_fenv_h" = xyes; then :
|
||||
cat >>confdefs.h <<_ACEOF
|
||||
#define HAVE_FENV_H 1
|
||||
_ACEOF
|
||||
ac_has_fenv_h=yes
|
||||
else
|
||||
ac_has_fenv_h=no
|
||||
fi
|
||||
|
||||
done
|
||||
|
||||
ac_c99_fenv=no;
|
||||
if test x"$ac_has_fenv_h" = x"yes"; then
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ISO C99 support for C++11 in <fenv.h>" >&5
|
||||
$as_echo_n "checking for ISO C99 support for C++11 in <fenv.h>... " >&6; }
|
||||
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
|
||||
/* end confdefs.h. */
|
||||
#include <fenv.h>
|
||||
int
|
||||
main ()
|
||||
{
|
||||
int except, mode;
|
||||
fexcept_t* pflag;
|
||||
fenv_t* penv;
|
||||
int ret;
|
||||
ret = feclearexcept(except);
|
||||
ret = fegetexceptflag(pflag, except);
|
||||
ret = feraiseexcept(except);
|
||||
ret = fesetexceptflag(pflag, except);
|
||||
ret = fetestexcept(except);
|
||||
ret = fegetround();
|
||||
ret = fesetround(mode);
|
||||
ret = fegetenv(penv);
|
||||
ret = feholdexcept(penv);
|
||||
ret = fesetenv(penv);
|
||||
ret = feupdateenv(penv);
|
||||
|
||||
;
|
||||
return 0;
|
||||
}
|
||||
_ACEOF
|
||||
if ac_fn_cxx_try_compile "$LINENO"; then :
|
||||
ac_c99_fenv=yes
|
||||
else
|
||||
ac_c99_fenv=no
|
||||
fi
|
||||
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_c99_fenv" >&5
|
||||
$as_echo "$ac_c99_fenv" >&6; }
|
||||
fi
|
||||
if test x"$ac_c99_fenv" = x"yes"; then
|
||||
|
||||
$as_echo "#define _GLIBCXX_USE_C99_FENV 1" >>confdefs.h
|
||||
|
||||
fi
|
||||
|
||||
gcc_no_link="$ac_save_gcc_no_link"
|
||||
LIBS="$ac_save_LIBS"
|
||||
CXXFLAGS="$ac_save_CXXFLAGS"
|
||||
|
|
|
@ -38,7 +38,7 @@
|
|||
|
||||
#if __cplusplus >= 201103L
|
||||
|
||||
#if _GLIBCXX_USE_C99_FENV_TR1
|
||||
#if _GLIBCXX_USE_C99_FENV
|
||||
|
||||
#undef feclearexcept
|
||||
#undef fegetexceptflag
|
||||
|
@ -74,7 +74,7 @@ namespace std
|
|||
using ::feupdateenv;
|
||||
} // namespace
|
||||
|
||||
#endif // _GLIBCXX_USE_C99_FENV_TR1
|
||||
#endif // _GLIBCXX_USE_C99_FENV
|
||||
|
||||
#endif // C++11
|
||||
|
||||
|
|
|
@ -78,7 +78,7 @@ namespace std
|
|||
|
||||
#if __cplusplus >= 201103L
|
||||
|
||||
#ifdef _GLIBCXX_USE_C99_CTYPE_TR1
|
||||
#ifdef _GLIBCXX_USE_C99_CTYPE
|
||||
|
||||
#undef isblank
|
||||
|
||||
|
@ -87,7 +87,7 @@ namespace std
|
|||
using ::isblank;
|
||||
} // namespace std
|
||||
|
||||
#endif // _GLIBCXX_USE_C99_CTYPE_TR1
|
||||
#endif // _GLIBCXX_USE_C99_CTYPE
|
||||
|
||||
#endif // C++11
|
||||
|
||||
|
|
|
@ -41,7 +41,7 @@
|
|||
# include <fenv.h>
|
||||
#endif
|
||||
|
||||
#ifdef _GLIBCXX_USE_C99_FENV_TR1
|
||||
#ifdef _GLIBCXX_USE_C99_FENV
|
||||
|
||||
#undef feclearexcept
|
||||
#undef fegetexceptflag
|
||||
|
@ -77,7 +77,7 @@ namespace std
|
|||
using ::feupdateenv;
|
||||
} // namespace std
|
||||
|
||||
#endif // _GLIBCXX_USE_C99_FENV_TR1
|
||||
#endif // _GLIBCXX_USE_C99_FENV
|
||||
|
||||
#endif // C++11
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue