From 20b5f0b3e6cfdaacacb0059bb43b93cb75de0637 Mon Sep 17 00:00:00 2001 From: Edward Smith-Rowland <3dw4rd@verizon.net> Date: Fri, 4 Sep 2015 11:13:34 +0000 Subject: [PATCH] Add C++11 header . 2015-09-04 Edward Smith-Rowland <3dw4rd@verizon.net> Jonathan Wakely * acinclude.m4 (GLIBCXX_CHECK_UCHAR_H): Define. * config.h.in: Regenerate. * configure: Regenerate. * configure.ac: Check for . * include/Makefile.am: Add new headers. * include/Makefile.in: Regenerate. * include/c/cuchar: New. * include/c_compatibility/uchar.h: New. * include/c_global/cuchar: New. * include/c_std/cuchar: New. * include/precompiled/stdc++.h: Include . * testsuite/17_intro/headers/c++200x/stdc++.cc: Include . * testsuite/17_intro/headers/c++200x/stdc++_multiple_inclusion.cc: Include . Co-Authored-By: Jonathan Wakely From-SVN: r227488 --- libstdc++-v3/ChangeLog | 19 +++++ libstdc++-v3/acinclude.m4 | 46 +++++++++++ libstdc++-v3/config.h.in | 7 ++ libstdc++-v3/configure | 81 +++++++++++++++++++ libstdc++-v3/configure.ac | 1 + libstdc++-v3/include/Makefile.am | 2 + libstdc++-v3/include/Makefile.in | 2 + libstdc++-v3/include/c/cuchar | 47 +++++++++++ libstdc++-v3/include/c_compatibility/uchar.h | 45 +++++++++++ libstdc++-v3/include/c_global/cuchar | 77 ++++++++++++++++++ libstdc++-v3/include/c_std/cuchar | 77 ++++++++++++++++++ libstdc++-v3/include/precompiled/stdc++.h | 1 + .../17_intro/headers/c++200x/stdc++.cc | 3 + .../c++200x/stdc++_multiple_inclusion.cc | 6 ++ 14 files changed, 414 insertions(+) create mode 100644 libstdc++-v3/include/c/cuchar create mode 100644 libstdc++-v3/include/c_compatibility/uchar.h create mode 100644 libstdc++-v3/include/c_global/cuchar create mode 100644 libstdc++-v3/include/c_std/cuchar diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 68464ead640..03fd3be590d 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,22 @@ +2015-09-04 Edward Smith-Rowland <3dw4rd@verizon.net> + Jonathan Wakely + + Add C++11 header . + * acinclude.m4 (GLIBCXX_CHECK_UCHAR_H): Define. + * config.h.in: Regenerate. + * configure: Regenerate. + * configure.ac: Check for . + * include/Makefile.am: Add new headers. + * include/Makefile.in: Regenerate. + * include/c/cuchar: New. + * include/c_compatibility/uchar.h: New. + * include/c_global/cuchar: New. + * include/c_std/cuchar: New. + * include/precompiled/stdc++.h: Include . + * testsuite/17_intro/headers/c++200x/stdc++.cc: Include . + * testsuite/17_intro/headers/c++200x/stdc++_multiple_inclusion.cc: + Include . + 2015-09-04 Jonathan Wakely PR libstdc++/65473 diff --git a/libstdc++-v3/acinclude.m4 b/libstdc++-v3/acinclude.m4 index 789bc5894a0..64c9b7e32cf 100644 --- a/libstdc++-v3/acinclude.m4 +++ b/libstdc++-v3/acinclude.m4 @@ -1808,6 +1808,52 @@ AC_DEFUN([GLIBCXX_CHECK_C99_TR1], [ AC_LANG_RESTORE ]) +dnl +dnl Check for uchar.h and usability. +dnl +AC_DEFUN([GLIBCXX_CHECK_UCHAR_H], [ + + # Test uchar.h. + AC_CHECK_HEADERS(uchar.h, ac_has_uchar_h=yes, ac_has_uchar_h=no) + + AC_LANG_SAVE + AC_LANG_CPLUSPLUS + ac_save_CXXFLAGS="$CXXFLAGS" + CXXFLAGS="$CXXFLAGS -std=c++11" + + if test x"$ac_has_uchar_h" = x"yes"; then + AC_MSG_CHECKING([for ISO C11 support for ]) + AC_TRY_COMPILE([#include + #ifdef __STDC_UTF_16__ + long i = __STDC_UTF_16__; + #endif + #ifdef __STDC_UTF_32__ + long j = __STDC_UTF_32__; + #endif + namespace test + { + using ::c16rtomb; + using ::c32rtomb; + using ::mbrtoc16; + using ::mbrtoc32; + } + ], + [], [ac_c11_uchar_cxx11=yes], [ac_c11_uchar_cxx11=no]) + else + ac_c11_uchar_cxx11=no + fi + AC_MSG_RESULT($ac_c11_uchar_cxx11) + if test x"$ac_c11_uchar_cxx11" = x"yes"; then + AC_DEFINE(_GLIBCXX_USE_C11_UCHAR_CXX11, 1, + [Define if C11 functions in should be imported into + namespace std in .]) + fi + + CXXFLAGS="$ac_save_CXXFLAGS" + AC_LANG_RESTORE +]) + + dnl dnl Check whether "/dev/random" and "/dev/urandom" are available for the dnl random_device of "TR1" (Chapter 5.1, "Random number generation"). diff --git a/libstdc++-v3/config.h.in b/libstdc++-v3/config.h.in index 337f61440a9..cc7a21e820c 100644 --- a/libstdc++-v3/config.h.in +++ b/libstdc++-v3/config.h.in @@ -454,6 +454,9 @@ /* Define to 1 if the target supports thread-local storage. */ #undef HAVE_TLS +/* Define to 1 if you have the header file. */ +#undef HAVE_UCHAR_H + /* Define to 1 if you have the header file. */ #undef HAVE_UNISTD_H @@ -780,6 +783,10 @@ /* Define to use Sun versioning in the shared library. */ #undef _GLIBCXX_SYMVER_SUN +/* Define if C11 functions in should be imported into namespace std + in . */ +#undef _GLIBCXX_USE_C11_UCHAR_CXX11 + /* Define if C99 functions or macros from , , , , and can be used or exposed. */ #undef _GLIBCXX_USE_C99 diff --git a/libstdc++-v3/configure b/libstdc++-v3/configure index 8646465fbbe..6d35f30a18a 100755 --- a/libstdc++-v3/configure +++ b/libstdc++-v3/configure @@ -18149,6 +18149,87 @@ fi + + # Test uchar.h. + for ac_header in uchar.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "uchar.h" "ac_cv_header_uchar_h" "$ac_includes_default" +if test "x$ac_cv_header_uchar_h" = x""yes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_UCHAR_H 1 +_ACEOF + ac_has_uchar_h=yes +else + ac_has_uchar_h=no +fi + +done + + + + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + + ac_save_CXXFLAGS="$CXXFLAGS" + CXXFLAGS="$CXXFLAGS -std=c++11" + + if test x"$ac_has_uchar_h" = x"yes"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ISO C11 support for " >&5 +$as_echo_n "checking for ISO C11 support for ... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + #ifdef __STDC_UTF_16__ + long i = __STDC_UTF_16__; + #endif + #ifdef __STDC_UTF_32__ + long j = __STDC_UTF_32__; + #endif + namespace test + { + using ::c16rtomb; + using ::c32rtomb; + using ::mbrtoc16; + using ::mbrtoc32; + } + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_c11_uchar_cxx11=yes +else + ac_c11_uchar_cxx11=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + else + ac_c11_uchar_cxx11=no + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_c11_uchar_cxx11" >&5 +$as_echo "$ac_c11_uchar_cxx11" >&6; } + if test x"$ac_c11_uchar_cxx11" = x"yes"; then + +$as_echo "#define _GLIBCXX_USE_C11_UCHAR_CXX11 1" >>confdefs.h + + fi + + CXXFLAGS="$ac_save_CXXFLAGS" + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + # For the streamoff typedef. diff --git a/libstdc++-v3/configure.ac b/libstdc++-v3/configure.ac index 96ff16f3f3e..34563480634 100644 --- a/libstdc++-v3/configure.ac +++ b/libstdc++-v3/configure.ac @@ -181,6 +181,7 @@ GLIBCXX_ENABLE_VTABLE_VERIFY([no]) # Checks for operating systems support that doesn't require linking. GLIBCXX_CHECK_STDIO_PROTO GLIBCXX_CHECK_SYSTEM_ERROR +GLIBCXX_CHECK_UCHAR_H # For the streamoff typedef. GLIBCXX_CHECK_INT64_T diff --git a/libstdc++-v3/include/Makefile.am b/libstdc++-v3/include/Makefile.am index 41fc4af6d30..e579b22f1b1 100644 --- a/libstdc++-v3/include/Makefile.am +++ b/libstdc++-v3/include/Makefile.am @@ -710,6 +710,7 @@ c_base_headers = \ ${c_base_srcdir}/cstring \ ${c_base_srcdir}/ctgmath \ ${c_base_srcdir}/ctime \ + ${c_base_srcdir}/cuchar \ ${c_base_srcdir}/cwchar \ ${c_base_srcdir}/cwctype @@ -752,6 +753,7 @@ c_compatibility_headers = \ ${c_compatibility_srcdir}/string.h \ ${c_compatibility_srcdir}/tgmath.h \ ${c_compatibility_srcdir}/time.h \ + ${c_compatibility_srcdir}/uchar.h \ ${c_compatibility_srcdir}/wchar.h \ ${c_compatibility_srcdir}/wctype.h endif diff --git a/libstdc++-v3/include/Makefile.in b/libstdc++-v3/include/Makefile.in index 6470d0173d5..47066705d23 100644 --- a/libstdc++-v3/include/Makefile.in +++ b/libstdc++-v3/include/Makefile.in @@ -997,6 +997,7 @@ c_base_headers = \ ${c_base_srcdir}/cstring \ ${c_base_srcdir}/ctgmath \ ${c_base_srcdir}/ctime \ + ${c_base_srcdir}/cuchar \ ${c_base_srcdir}/cwchar \ ${c_base_srcdir}/cwctype @@ -1033,6 +1034,7 @@ c_compatibility_builddir = . @GLIBCXX_C_HEADERS_C_TRUE@ ${c_compatibility_srcdir}/string.h \ @GLIBCXX_C_HEADERS_C_TRUE@ ${c_compatibility_srcdir}/tgmath.h \ @GLIBCXX_C_HEADERS_C_TRUE@ ${c_compatibility_srcdir}/time.h \ +@GLIBCXX_C_HEADERS_C_TRUE@ ${c_compatibility_srcdir}/uchar.h \ @GLIBCXX_C_HEADERS_C_TRUE@ ${c_compatibility_srcdir}/wchar.h \ @GLIBCXX_C_HEADERS_C_TRUE@ ${c_compatibility_srcdir}/wctype.h diff --git a/libstdc++-v3/include/c/cuchar b/libstdc++-v3/include/c/cuchar new file mode 100644 index 00000000000..dd50c47bbe0 --- /dev/null +++ b/libstdc++-v3/include/c/cuchar @@ -0,0 +1,47 @@ +// -*- C++ -*- forwarding header. + +// Copyright (C) 2015 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// Under Section 7 of GPL version 3, you are granted additional +// permissions described in the GCC Runtime Library Exception, version +// 3.1, as published by the Free Software Foundation. + +// You should have received a copy of the GNU General Public License and +// a copy of the GCC Runtime Library Exception along with this program; +// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +// . + +// +// ISO C++ 14882:2011 21.8 +// + +#ifndef _GLIBCXX_CUCHAR +#define _GLIBCXX_CUCHAR 1 + +#pragma GCC system_header + +#if __cplusplus < 201103L +# include +#else + +#include +#include + +#if _GLIBCXX_USE_C11_UCHAR_CXX11 +# include_next +#endif + +#endif // C++11 + +#endif // _GLIBCXX_CUCHAR diff --git a/libstdc++-v3/include/c_compatibility/uchar.h b/libstdc++-v3/include/c_compatibility/uchar.h new file mode 100644 index 00000000000..746f4afb339 --- /dev/null +++ b/libstdc++-v3/include/c_compatibility/uchar.h @@ -0,0 +1,45 @@ +// -*- C++ -*- compatibility header. + +// Copyright (C) 2015 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// Under Section 7 of GPL version 3, you are granted additional +// permissions described in the GCC Runtime Library Exception, version +// 3.1, as published by the Free Software Foundation. + +// You should have received a copy of the GNU General Public License and +// a copy of the GCC Runtime Library Exception along with this program; +// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +// . + +/** @file uchar.h + * This is a Standard C++ Library header. + */ + +#include + +#ifndef _GLIBCXX_UCHAR_H +#define _GLIBCXX_UCHAR_H 1 + +#ifdef _GLIBCXX_NAMESPACE_C + +#if _GLIBCXX_USE_C11_UCHAR_CXX11 +using std::mbrtoc16; +using std::c16rtomb; +using std::mbrtoc32; +using std::c32rtomb; +#endif // _GLIBCXX_USE_C11_UCHAR_CXX11 + +#endif // _GLIBCXX_NAMESPACE_C + +#endif // _GLIBCXX_UCHAR_H diff --git a/libstdc++-v3/include/c_global/cuchar b/libstdc++-v3/include/c_global/cuchar new file mode 100644 index 00000000000..3b30c6a9b4b --- /dev/null +++ b/libstdc++-v3/include/c_global/cuchar @@ -0,0 +1,77 @@ +// -*- C++ -*- forwarding header. + +// Copyright (C) 2015 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// Under Section 7 of GPL version 3, you are granted additional +// permissions described in the GCC Runtime Library Exception, version +// 3.1, as published by the Free Software Foundation. + +// You should have received a copy of the GNU General Public License and +// a copy of the GCC Runtime Library Exception along with this program; +// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +// . + +/** @file include/cuchar + * This is a Standard C++ Library file. You should @c \#include this file + * in your programs, rather than any of the @a *.h implementation files. + * + * This is the C++ version of the Standard C Library header @c uchar.h, + * and its contents are (mostly) the same as that header, but are all + * contained in the namespace @c std (except for names which are defined + * as macros in C). + */ + +// +// ISO C++ 14882:2011 21.8 +// + +#ifndef _GLIBCXX_CUCHAR +#define _GLIBCXX_CUCHAR 1 + +#pragma GCC system_header + +#if __cplusplus < 201103L +# include +#else + +#include +#include + +#if _GLIBCXX_USE_C11_UCHAR_CXX11 + +#include + +// Get rid of those macros defined in in lieu of real functions. +#undef mbrtoc16 +#undef c16rtomb +#undef mbrtoc32 +#undef c32rtomb + +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + + using ::mbrtoc16; + using ::c16rtomb; + using ::mbrtoc32; + using ::c32rtomb; + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace std + +#endif // _GLIBCXX_USE_C11_UCHAR_CXX11 + +#endif // C++11 + +#endif // _GLIBCXX_CUCHAR diff --git a/libstdc++-v3/include/c_std/cuchar b/libstdc++-v3/include/c_std/cuchar new file mode 100644 index 00000000000..7d5eedbc63b --- /dev/null +++ b/libstdc++-v3/include/c_std/cuchar @@ -0,0 +1,77 @@ +// -*- C++ -*- forwarding header. + +// Copyright (C) 2015 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// Under Section 7 of GPL version 3, you are granted additional +// permissions described in the GCC Runtime Library Exception, version +// 3.1, as published by the Free Software Foundation. + +// You should have received a copy of the GNU General Public License and +// a copy of the GCC Runtime Library Exception along with this program; +// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +// . + +/** @file include/cuchar + * This is a Standard C++ Library file. You should @c #include this file + * in your programs, rather than any of the @a *.h implementation files. + * + * This is the C++ version of the Standard C Library header @c uchar.h, + * and its contents are (mostly) the same as that header, but are all + * contained in the namespace @c std (except for names which are defined + * as macros in C). + */ + +// +// ISO C++ 14882:2011 21.8 +// + +#ifndef _GLIBCXX_CUCHAR +#define _GLIBCXX_CUCHAR 1 + +#pragma GCC system_header + +#if __cplusplus < 201103L +# include +#else + +#include +#include + +#if _GLIBCXX_USE_C11_UCHAR_CXX11 + +#include + +// Get rid of those macros defined in in lieu of real functions. +#undef mbrtoc16 +#undef c16rtomb +#undef mbrtoc32 +#undef c32rtomb + +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + + using ::mbrtoc16; + using ::c16rtomb; + using ::mbrtoc32; + using ::c32rtomb; + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace std + +#endif // _GLIBCXX_USE_C11_UCHAR_CXX11 + +#endif // C++11 + +#endif // _GLIBCXX_CUCHAR diff --git a/libstdc++-v3/include/precompiled/stdc++.h b/libstdc++-v3/include/precompiled/stdc++.h index 693391adffb..ab119fecd2f 100644 --- a/libstdc++-v3/include/precompiled/stdc++.h +++ b/libstdc++-v3/include/precompiled/stdc++.h @@ -56,6 +56,7 @@ #include #include #include +#include #include #include #endif diff --git a/libstdc++-v3/testsuite/17_intro/headers/c++200x/stdc++.cc b/libstdc++-v3/testsuite/17_intro/headers/c++200x/stdc++.cc index 50c32744732..d1c64b190a8 100644 --- a/libstdc++-v3/testsuite/17_intro/headers/c++200x/stdc++.cc +++ b/libstdc++-v3/testsuite/17_intro/headers/c++200x/stdc++.cc @@ -59,6 +59,9 @@ #include #endif #include +#if __has_include() +#include +#endif #ifdef _GLIBCXX_HAVE_WCHAR_H #include #endif diff --git a/libstdc++-v3/testsuite/17_intro/headers/c++200x/stdc++_multiple_inclusion.cc b/libstdc++-v3/testsuite/17_intro/headers/c++200x/stdc++_multiple_inclusion.cc index 9fa919f21c5..e51bdee70f6 100644 --- a/libstdc++-v3/testsuite/17_intro/headers/c++200x/stdc++_multiple_inclusion.cc +++ b/libstdc++-v3/testsuite/17_intro/headers/c++200x/stdc++_multiple_inclusion.cc @@ -59,6 +59,9 @@ #include #endif #include +#if __has_include() +#include +#endif #ifdef _GLIBCXX_HAVE_WCHAR_H #include #endif @@ -103,6 +106,9 @@ #include #endif #include +#if __has_include() +#include +#endif #ifdef _GLIBCXX_HAVE_WCHAR_H #include #endif -- 2.30.2