diff --git a/libstdc++-v3/acinclude.m4 b/libstdc++-v3/acinclude.m4 index 138bd58d86c..0fe8ce89986 100644 --- a/libstdc++-v3/acinclude.m4 +++ b/libstdc++-v3/acinclude.m4 @@ -4449,12 +4449,16 @@ dnl AC_DEFUN([GLIBCXX_ENABLE_LIBSTDCXX_DUAL_ABI], [ GLIBCXX_ENABLE(libstdcxx-dual-abi,$1,,[support two versions of std::string]) if test x$enable_symvers = xgnu-versioned-namespace; then - # gnu-versioned-namespace is incompatible with the dual ABI. - enable_libstdcxx_dual_abi="no" - fi - if test x"$enable_libstdcxx_dual_abi" != xyes; then + # gnu-versioned-namespace is incompatible with the dual ABI... AC_MSG_NOTICE([dual ABI is disabled]) - default_libstdcxx_abi="gcc4-compatible" + enable_libstdcxx_dual_abi="no" + # ... and use the cxx11 one. + default_libstdcxx_abi="new" + else + if test x"$enable_libstdcxx_dual_abi" != xyes; then + AC_MSG_NOTICE([dual ABI is disabled]) + default_libstdcxx_abi="gcc4-compatible" + fi fi GLIBCXX_CONDITIONAL(ENABLE_DUAL_ABI, test $enable_libstdcxx_dual_abi = yes) ]) diff --git a/libstdc++-v3/config/locale/dragonfly/monetary_members.cc b/libstdc++-v3/config/locale/dragonfly/monetary_members.cc index 1265190dad9..5f91fd9b560 100644 --- a/libstdc++-v3/config/locale/dragonfly/monetary_members.cc +++ b/libstdc++-v3/config/locale/dragonfly/monetary_members.cc @@ -39,7 +39,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION // This file might be compiled twice, but we only want to define the members // of money_base once. -#if ! _GLIBCXX_USE_CXX11_ABI +#if ! _GLIBCXX_USE_CXX11_ABI || ! _GLIBCXX_USE_DUAL_ABI // Construct and return valid pattern consisting of some combination of: // space none symbol sign value @@ -207,7 +207,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION } return __ret; } -#endif +#endif // ! _GLIBCXX_USE_CXX11_ABI || ! _GLIBCXX_USE_DUAL_ABI template<> void diff --git a/libstdc++-v3/config/locale/generic/monetary_members.cc b/libstdc++-v3/config/locale/generic/monetary_members.cc index a778a6f402d..6b56e30a568 100644 --- a/libstdc++-v3/config/locale/generic/monetary_members.cc +++ b/libstdc++-v3/config/locale/generic/monetary_members.cc @@ -36,7 +36,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION // This file might be compiled twice, but we only want to define the members // of money_base once. -#if ! _GLIBCXX_USE_CXX11_ABI +#if ! _GLIBCXX_USE_CXX11_ABI || ! _GLIBCXX_USE_DUAL_ABI // Construct and return valid pattern consisting of some combination of: // space none symbol sign value diff --git a/libstdc++-v3/config/locale/gnu/monetary_members.cc b/libstdc++-v3/config/locale/gnu/monetary_members.cc index 556575363da..54be63c44d7 100644 --- a/libstdc++-v3/config/locale/gnu/monetary_members.cc +++ b/libstdc++-v3/config/locale/gnu/monetary_members.cc @@ -37,7 +37,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION // This file might be compiled twice, but we only want to define the members // of money_base once. -#if ! _GLIBCXX_USE_CXX11_ABI +#if ! _GLIBCXX_USE_CXX11_ABI || ! _GLIBCXX_USE_DUAL_ABI // Construct and return valid pattern consisting of some combination of: // space none symbol sign value @@ -205,7 +205,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION } return __ret; } -#endif +#endif // ! _GLIBCXX_USE_CXX11_ABI || ! _GLIBCXX_USE_DUAL_ABI extern char __narrow_multibyte_chars(const char* s, __locale_t cloc); diff --git a/libstdc++-v3/config/locale/gnu/numeric_members.cc b/libstdc++-v3/config/locale/gnu/numeric_members.cc index c714d6a544f..ae17cb76c81 100644 --- a/libstdc++-v3/config/locale/gnu/numeric_members.cc +++ b/libstdc++-v3/config/locale/gnu/numeric_members.cc @@ -39,7 +39,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION extern char __narrow_multibyte_chars(const char* s, __locale_t cloc); // This file might be compiled twice, but we only want to define this once. -#if ! _GLIBCXX_USE_CXX11_ABI +#if ! _GLIBCXX_USE_CXX11_ABI || ! _GLIBCXX_USE_DUAL_ABI char __narrow_multibyte_chars(const char* s, __locale_t cloc) { @@ -84,7 +84,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION } return '\0'; } -#endif +#endif // ! _GLIBCXX_USE_CXX11_ABI || ! _GLIBCXX_USE_DUAL_ABI template<> void diff --git a/libstdc++-v3/configure b/libstdc++-v3/configure index 9b94fd71e42..d3c4106a74a 100755 --- a/libstdc++-v3/configure +++ b/libstdc++-v3/configure @@ -75217,13 +75217,18 @@ fi if test x$enable_symvers = xgnu-versioned-namespace; then - # gnu-versioned-namespace is incompatible with the dual ABI. - enable_libstdcxx_dual_abi="no" - fi - if test x"$enable_libstdcxx_dual_abi" != xyes; then + # gnu-versioned-namespace is incompatible with the dual ABI... { $as_echo "$as_me:${as_lineno-$LINENO}: dual ABI is disabled" >&5 $as_echo "$as_me: dual ABI is disabled" >&6;} - default_libstdcxx_abi="gcc4-compatible" + enable_libstdcxx_dual_abi="no" + # ... and use the cxx11 one. + default_libstdcxx_abi="new" + else + if test x"$enable_libstdcxx_dual_abi" != xyes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: dual ABI is disabled" >&5 +$as_echo "$as_me: dual ABI is disabled" >&6;} + default_libstdcxx_abi="gcc4-compatible" + fi fi diff --git a/libstdc++-v3/include/bits/c++config b/libstdc++-v3/include/bits/c++config index 191880fb99d..f899a580b60 100644 --- a/libstdc++-v3/include/bits/c++config +++ b/libstdc++-v3/include/bits/c++config @@ -325,26 +325,6 @@ namespace std #define _GLIBCXX_USE_CXX11_ABI #endif -#if _GLIBCXX_USE_CXX11_ABI -namespace std -{ - inline namespace __cxx11 __attribute__((__abi_tag__ ("cxx11"))) { } -} -namespace __gnu_cxx -{ - inline namespace __cxx11 __attribute__((__abi_tag__ ("cxx11"))) { } -} -# define _GLIBCXX_NAMESPACE_CXX11 __cxx11:: -# define _GLIBCXX_BEGIN_NAMESPACE_CXX11 namespace __cxx11 { -# define _GLIBCXX_END_NAMESPACE_CXX11 } -# define _GLIBCXX_DEFAULT_ABI_TAG _GLIBCXX_ABI_TAG_CXX11 -#else -# define _GLIBCXX_NAMESPACE_CXX11 -# define _GLIBCXX_BEGIN_NAMESPACE_CXX11 -# define _GLIBCXX_END_NAMESPACE_CXX11 -# define _GLIBCXX_DEFAULT_ABI_TAG -#endif - // Non-zero if inline namespaces are used for versioning the entire library. #define _GLIBCXX_INLINE_VERSION @@ -396,7 +376,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION // Non-inline namespace for components replaced by alternates in active mode. namespace __cxx1998 { -# if _GLIBCXX_USE_CXX11_ABI +# if _GLIBCXX_USE_CXX11_ABI && ! _GLIBCXX_VERSION_NAMESPACE inline namespace __cxx11 __attribute__((__abi_tag__ ("cxx11"))) { } # endif } @@ -426,6 +406,26 @@ _GLIBCXX_END_NAMESPACE_VERSION # endif #endif +#if _GLIBCXX_USE_CXX11_ABI && ! _GLIBCXX_INLINE_VERSION +namespace std +{ + inline namespace __cxx11 __attribute__((__abi_tag__ ("cxx11"))) { } +} +namespace __gnu_cxx +{ + inline namespace __cxx11 __attribute__((__abi_tag__ ("cxx11"))) { } +} +# define _GLIBCXX_NAMESPACE_CXX11 __cxx11:: +# define _GLIBCXX_BEGIN_NAMESPACE_CXX11 namespace __cxx11 { +# define _GLIBCXX_END_NAMESPACE_CXX11 } +# define _GLIBCXX_DEFAULT_ABI_TAG _GLIBCXX_ABI_TAG_CXX11 +#else +# define _GLIBCXX_NAMESPACE_CXX11 +# define _GLIBCXX_BEGIN_NAMESPACE_CXX11 +# define _GLIBCXX_END_NAMESPACE_CXX11 +# define _GLIBCXX_DEFAULT_ABI_TAG +#endif + // Macros for namespace scope. Either namespace std:: or the name // of some nested namespace within it corresponding to the active mode. // _GLIBCXX_STD_A diff --git a/libstdc++-v3/python/libstdcxx/v6/printers.py b/libstdc++-v3/python/libstdcxx/v6/printers.py index 17c33c1e54f..f11ac066966 100644 --- a/libstdc++-v3/python/libstdcxx/v6/printers.py +++ b/libstdc++-v3/python/libstdcxx/v6/printers.py @@ -942,6 +942,8 @@ class StdStringPrinter: def __init__(self, typename, val): self.val = val self.new_string = typename.find("::__cxx11::basic_string") != -1 + if not self.new_string and _versioned_namespace: + self.new_string = typename.find("::" + _versioned_namespace + "basic_string") != -1 def to_string(self): # Make sure &string works, too. diff --git a/libstdc++-v3/src/Makefile.am b/libstdc++-v3/src/Makefile.am index b83c222d51d..fcab83ada2d 100644 --- a/libstdc++-v3/src/Makefile.am +++ b/libstdc++-v3/src/Makefile.am @@ -82,6 +82,9 @@ else ldbl_compat_sources = endif +if ENABLE_SYMVERS_GNU_NAMESPACE +ldbl_alt128_compat_sources = +else if GLIBCXX_LDBL_ALT128_COMPAT if ENABLE_DUAL_ABI ldbl_alt128_compat_cxx11_sources = \ @@ -95,6 +98,7 @@ ldbl_alt128_compat_sources = \ else ldbl_alt128_compat_sources = endif +endif if ENABLE_SYMVERS_GNU_NAMESPACE cxx0x_compat_sources = diff --git a/libstdc++-v3/src/Makefile.in b/libstdc++-v3/src/Makefile.in index cef290c5d11..946101389c4 100644 --- a/libstdc++-v3/src/Makefile.in +++ b/libstdc++-v3/src/Makefile.in @@ -158,10 +158,9 @@ am__objects_2 = compatibility.lo compatibility-debug_list.lo \ @ENABLE_SYMVERS_GNU_NAMESPACE_FALSE@ compatibility-chrono.lo \ @ENABLE_SYMVERS_GNU_NAMESPACE_FALSE@ compatibility-condvar.lo \ @ENABLE_SYMVERS_GNU_NAMESPACE_FALSE@ compatibility-thread-c++0x.lo -@ENABLE_DUAL_ABI_TRUE@@GLIBCXX_LDBL_ALT128_COMPAT_TRUE@am__objects_4 = compatibility-ldbl-alt128-cxx11.lo -@GLIBCXX_LDBL_ALT128_COMPAT_TRUE@am__objects_5 = \ -@GLIBCXX_LDBL_ALT128_COMPAT_TRUE@ compatibility-ldbl-alt128.lo \ -@GLIBCXX_LDBL_ALT128_COMPAT_TRUE@ $(am__objects_4) +@ENABLE_DUAL_ABI_TRUE@@ENABLE_SYMVERS_GNU_NAMESPACE_FALSE@@GLIBCXX_LDBL_ALT128_COMPAT_TRUE@am__objects_4 = compatibility-ldbl-alt128-cxx11.lo +@ENABLE_SYMVERS_GNU_NAMESPACE_FALSE@@GLIBCXX_LDBL_ALT128_COMPAT_TRUE@am__objects_5 = compatibility-ldbl-alt128.lo \ +@ENABLE_SYMVERS_GNU_NAMESPACE_FALSE@@GLIBCXX_LDBL_ALT128_COMPAT_TRUE@ $(am__objects_4) am__objects_6 = $(am__objects_3) $(am__objects_5) am_libstdc___la_OBJECTS = $(am__objects_2) $(am__objects_6) libstdc___la_OBJECTS = $(am_libstdc___la_OBJECTS) @@ -506,14 +505,15 @@ SUBDIRS = c++98 c++11 c++17 c++20 $(filesystem_dir) $(backtrace_dir) @GLIBCXX_LDBL_COMPAT_FALSE@ldbl_compat_sources = @GLIBCXX_LDBL_COMPAT_TRUE@ldbl_compat_sources = compatibility-ldbl.cc -@ENABLE_DUAL_ABI_FALSE@@GLIBCXX_LDBL_ALT128_COMPAT_TRUE@ldbl_alt128_compat_cxx11_sources = -@ENABLE_DUAL_ABI_TRUE@@GLIBCXX_LDBL_ALT128_COMPAT_TRUE@ldbl_alt128_compat_cxx11_sources = \ -@ENABLE_DUAL_ABI_TRUE@@GLIBCXX_LDBL_ALT128_COMPAT_TRUE@ compatibility-ldbl-alt128-cxx11.cc - -@GLIBCXX_LDBL_ALT128_COMPAT_FALSE@ldbl_alt128_compat_sources = -@GLIBCXX_LDBL_ALT128_COMPAT_TRUE@ldbl_alt128_compat_sources = \ -@GLIBCXX_LDBL_ALT128_COMPAT_TRUE@ compatibility-ldbl-alt128.cc \ -@GLIBCXX_LDBL_ALT128_COMPAT_TRUE@ ${ldbl_alt128_compat_cxx11_sources} +@ENABLE_SYMVERS_GNU_NAMESPACE_FALSE@@GLIBCXX_LDBL_ALT128_COMPAT_FALSE@ldbl_alt128_compat_sources = +@ENABLE_SYMVERS_GNU_NAMESPACE_FALSE@@GLIBCXX_LDBL_ALT128_COMPAT_TRUE@ldbl_alt128_compat_sources = \ +@ENABLE_SYMVERS_GNU_NAMESPACE_FALSE@@GLIBCXX_LDBL_ALT128_COMPAT_TRUE@ compatibility-ldbl-alt128.cc \ +@ENABLE_SYMVERS_GNU_NAMESPACE_FALSE@@GLIBCXX_LDBL_ALT128_COMPAT_TRUE@ ${ldbl_alt128_compat_cxx11_sources} + +@ENABLE_SYMVERS_GNU_NAMESPACE_TRUE@ldbl_alt128_compat_sources = +@ENABLE_DUAL_ABI_FALSE@@ENABLE_SYMVERS_GNU_NAMESPACE_FALSE@@GLIBCXX_LDBL_ALT128_COMPAT_TRUE@ldbl_alt128_compat_cxx11_sources = +@ENABLE_DUAL_ABI_TRUE@@ENABLE_SYMVERS_GNU_NAMESPACE_FALSE@@GLIBCXX_LDBL_ALT128_COMPAT_TRUE@ldbl_alt128_compat_cxx11_sources = \ +@ENABLE_DUAL_ABI_TRUE@@ENABLE_SYMVERS_GNU_NAMESPACE_FALSE@@GLIBCXX_LDBL_ALT128_COMPAT_TRUE@ compatibility-ldbl-alt128-cxx11.cc @ENABLE_SYMVERS_GNU_NAMESPACE_FALSE@cxx0x_compat_sources = \ @ENABLE_SYMVERS_GNU_NAMESPACE_FALSE@ compatibility-atomic-c++0x.cc \ diff --git a/libstdc++-v3/src/c++11/Makefile.am b/libstdc++-v3/src/c++11/Makefile.am index ecd46aafc01..b22c54fa057 100644 --- a/libstdc++-v3/src/c++11/Makefile.am +++ b/libstdc++-v3/src/c++11/Makefile.am @@ -40,22 +40,22 @@ ctype_members.cc: ${glibcxx_srcdir}/$(CCTYPE_CC) $(LN_S) ${glibcxx_srcdir}/$(CCTYPE_CC) . || true if ENABLE_DUAL_ABI -cxx11_abi_sources = \ - cow-locale_init.cc \ +dual_abi_sources = \ cow-shim_facets.cc \ - cxx11-hash_tr1.cc \ - cxx11-ios_failure.cc \ - cxx11-shim_facets.cc \ - cxx11-stdexcept.cc + cxx11-shim_facets.cc else -cxx11_abi_sources = +dual_abi_sources = endif sources = \ chrono.cc \ codecvt.cc \ condition_variable.cc \ + cow-locale_init.cc \ cow-stdexcept.cc \ + cxx11-hash_tr1.cc \ + cxx11-ios_failure.cc \ + cxx11-stdexcept.cc \ ctype.cc \ debug.cc \ functexcept.cc \ @@ -75,19 +75,11 @@ sources = \ snprintf_lite.cc \ system_error.cc \ thread.cc \ - ${cxx11_abi_sources} \ + ${dual_abi_sources} \ ${host_sources} if ENABLE_DUAL_ABI extra_string_inst_sources = \ - cow-fstream-inst.cc \ - cow-sstream-inst.cc \ - cow-string-inst.cc \ - cow-string-io-inst.cc \ - cow-wstring-inst.cc \ - cow-wstring-io-inst.cc \ - cxx11-locale-inst.cc \ - cxx11-wlocale-inst.cc \ sso_string.cc else extra_string_inst_sources = @@ -97,6 +89,14 @@ if ENABLE_EXTERN_TEMPLATE # XTEMPLATE_FLAGS = -fno-implicit-templates inst_sources = \ $(extra_string_inst_sources) \ + cow-fstream-inst.cc \ + cow-sstream-inst.cc \ + cow-string-inst.cc \ + cow-string-io-inst.cc \ + cow-wstring-inst.cc \ + cow-wstring-io-inst.cc \ + cxx11-locale-inst.cc \ + cxx11-wlocale-inst.cc \ ext11-inst.cc \ fstream-inst.cc \ ios-inst.cc \ diff --git a/libstdc++-v3/src/c++11/Makefile.in b/libstdc++-v3/src/c++11/Makefile.in index 4db28bd8515..fa5b9543f76 100644 --- a/libstdc++-v3/src/c++11/Makefile.in +++ b/libstdc++-v3/src/c++11/Makefile.in @@ -122,26 +122,27 @@ CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libc__11convenience_la_LIBADD = -@ENABLE_DUAL_ABI_TRUE@am__objects_1 = cow-locale_init.lo \ -@ENABLE_DUAL_ABI_TRUE@ cow-shim_facets.lo cxx11-hash_tr1.lo \ -@ENABLE_DUAL_ABI_TRUE@ cxx11-ios_failure.lo \ -@ENABLE_DUAL_ABI_TRUE@ cxx11-shim_facets.lo cxx11-stdexcept.lo +@ENABLE_DUAL_ABI_TRUE@am__objects_1 = cow-shim_facets.lo \ +@ENABLE_DUAL_ABI_TRUE@ cxx11-shim_facets.lo am__objects_2 = ctype_configure_char.lo ctype_members.lo am__objects_3 = chrono.lo codecvt.lo condition_variable.lo \ - cow-stdexcept.lo ctype.lo debug.lo functexcept.lo \ - functional.lo futex.lo future.lo hash_c++0x.lo \ + cow-locale_init.lo cow-stdexcept.lo cxx11-hash_tr1.lo \ + cxx11-ios_failure.lo cxx11-stdexcept.lo ctype.lo debug.lo \ + functexcept.lo functional.lo futex.lo future.lo hash_c++0x.lo \ hashtable_c++0x.lo ios.lo ios_errcat.lo limits.lo mutex.lo \ placeholders.lo random.lo regex.lo shared_ptr.lo \ snprintf_lite.lo system_error.lo thread.lo $(am__objects_1) \ $(am__objects_2) -@ENABLE_DUAL_ABI_TRUE@am__objects_4 = cow-fstream-inst.lo \ -@ENABLE_DUAL_ABI_TRUE@ cow-sstream-inst.lo cow-string-inst.lo \ -@ENABLE_DUAL_ABI_TRUE@ cow-string-io-inst.lo \ -@ENABLE_DUAL_ABI_TRUE@ cow-wstring-inst.lo \ -@ENABLE_DUAL_ABI_TRUE@ cow-wstring-io-inst.lo \ -@ENABLE_DUAL_ABI_TRUE@ cxx11-locale-inst.lo \ -@ENABLE_DUAL_ABI_TRUE@ cxx11-wlocale-inst.lo sso_string.lo +@ENABLE_DUAL_ABI_TRUE@am__objects_4 = sso_string.lo @ENABLE_EXTERN_TEMPLATE_TRUE@am__objects_5 = $(am__objects_4) \ +@ENABLE_EXTERN_TEMPLATE_TRUE@ cow-fstream-inst.lo \ +@ENABLE_EXTERN_TEMPLATE_TRUE@ cow-sstream-inst.lo \ +@ENABLE_EXTERN_TEMPLATE_TRUE@ cow-string-inst.lo \ +@ENABLE_EXTERN_TEMPLATE_TRUE@ cow-string-io-inst.lo \ +@ENABLE_EXTERN_TEMPLATE_TRUE@ cow-wstring-inst.lo \ +@ENABLE_EXTERN_TEMPLATE_TRUE@ cow-wstring-io-inst.lo \ +@ENABLE_EXTERN_TEMPLATE_TRUE@ cxx11-locale-inst.lo \ +@ENABLE_EXTERN_TEMPLATE_TRUE@ cxx11-wlocale-inst.lo \ @ENABLE_EXTERN_TEMPLATE_TRUE@ ext11-inst.lo fstream-inst.lo \ @ENABLE_EXTERN_TEMPLATE_TRUE@ ios-inst.lo iostream-inst.lo \ @ENABLE_EXTERN_TEMPLATE_TRUE@ istream-inst.lo locale-inst.lo \ @@ -457,20 +458,20 @@ host_sources = \ ctype_configure_char.cc \ ctype_members.cc -@ENABLE_DUAL_ABI_FALSE@cxx11_abi_sources = -@ENABLE_DUAL_ABI_TRUE@cxx11_abi_sources = \ -@ENABLE_DUAL_ABI_TRUE@ cow-locale_init.cc \ +@ENABLE_DUAL_ABI_FALSE@dual_abi_sources = +@ENABLE_DUAL_ABI_TRUE@dual_abi_sources = \ @ENABLE_DUAL_ABI_TRUE@ cow-shim_facets.cc \ -@ENABLE_DUAL_ABI_TRUE@ cxx11-hash_tr1.cc \ -@ENABLE_DUAL_ABI_TRUE@ cxx11-ios_failure.cc \ -@ENABLE_DUAL_ABI_TRUE@ cxx11-shim_facets.cc \ -@ENABLE_DUAL_ABI_TRUE@ cxx11-stdexcept.cc +@ENABLE_DUAL_ABI_TRUE@ cxx11-shim_facets.cc sources = \ chrono.cc \ codecvt.cc \ condition_variable.cc \ + cow-locale_init.cc \ cow-stdexcept.cc \ + cxx11-hash_tr1.cc \ + cxx11-ios_failure.cc \ + cxx11-stdexcept.cc \ ctype.cc \ debug.cc \ functexcept.cc \ @@ -490,19 +491,11 @@ sources = \ snprintf_lite.cc \ system_error.cc \ thread.cc \ - ${cxx11_abi_sources} \ + ${dual_abi_sources} \ ${host_sources} @ENABLE_DUAL_ABI_FALSE@extra_string_inst_sources = @ENABLE_DUAL_ABI_TRUE@extra_string_inst_sources = \ -@ENABLE_DUAL_ABI_TRUE@ cow-fstream-inst.cc \ -@ENABLE_DUAL_ABI_TRUE@ cow-sstream-inst.cc \ -@ENABLE_DUAL_ABI_TRUE@ cow-string-inst.cc \ -@ENABLE_DUAL_ABI_TRUE@ cow-string-io-inst.cc \ -@ENABLE_DUAL_ABI_TRUE@ cow-wstring-inst.cc \ -@ENABLE_DUAL_ABI_TRUE@ cow-wstring-io-inst.cc \ -@ENABLE_DUAL_ABI_TRUE@ cxx11-locale-inst.cc \ -@ENABLE_DUAL_ABI_TRUE@ cxx11-wlocale-inst.cc \ @ENABLE_DUAL_ABI_TRUE@ sso_string.cc # XTEMPLATE_FLAGS = @@ -511,6 +504,14 @@ sources = \ # XTEMPLATE_FLAGS = -fno-implicit-templates @ENABLE_EXTERN_TEMPLATE_TRUE@inst_sources = \ @ENABLE_EXTERN_TEMPLATE_TRUE@ $(extra_string_inst_sources) \ +@ENABLE_EXTERN_TEMPLATE_TRUE@ cow-fstream-inst.cc \ +@ENABLE_EXTERN_TEMPLATE_TRUE@ cow-sstream-inst.cc \ +@ENABLE_EXTERN_TEMPLATE_TRUE@ cow-string-inst.cc \ +@ENABLE_EXTERN_TEMPLATE_TRUE@ cow-string-io-inst.cc \ +@ENABLE_EXTERN_TEMPLATE_TRUE@ cow-wstring-inst.cc \ +@ENABLE_EXTERN_TEMPLATE_TRUE@ cow-wstring-io-inst.cc \ +@ENABLE_EXTERN_TEMPLATE_TRUE@ cxx11-locale-inst.cc \ +@ENABLE_EXTERN_TEMPLATE_TRUE@ cxx11-wlocale-inst.cc \ @ENABLE_EXTERN_TEMPLATE_TRUE@ ext11-inst.cc \ @ENABLE_EXTERN_TEMPLATE_TRUE@ fstream-inst.cc \ @ENABLE_EXTERN_TEMPLATE_TRUE@ ios-inst.cc \ diff --git a/libstdc++-v3/src/c++11/cow-fstream-inst.cc b/libstdc++-v3/src/c++11/cow-fstream-inst.cc index 6b6352c1419..d9657484326 100644 --- a/libstdc++-v3/src/c++11/cow-fstream-inst.cc +++ b/libstdc++-v3/src/c++11/cow-fstream-inst.cc @@ -29,10 +29,7 @@ #define _GLIBCXX_USE_CXX11_ABI 0 #include -#if ! _GLIBCXX_USE_DUAL_ABI -# error This file should not be compiled for this configuration. -#endif - +#if ! _GLIBCXX_USE_CXX11_ABI namespace std _GLIBCXX_VISIBILITY(default) { _GLIBCXX_BEGIN_NAMESPACE_VERSION @@ -76,3 +73,4 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION _GLIBCXX_END_NAMESPACE_VERSION } // namespace +#endif diff --git a/libstdc++-v3/src/c++11/cow-locale_init.cc b/libstdc++-v3/src/c++11/cow-locale_init.cc index 4d5c08f20cc..fa27b4142f2 100644 --- a/libstdc++-v3/src/c++11/cow-locale_init.cc +++ b/libstdc++-v3/src/c++11/cow-locale_init.cc @@ -24,10 +24,7 @@ #define _GLIBCXX_USE_CXX11_ABI 0 #include -#if ! _GLIBCXX_USE_DUAL_ABI -# error This file should not be compiled for this configuration. -#endif - +#if ! _GLIBCXX_USE_CXX11_ABI namespace std _GLIBCXX_VISIBILITY(default) { _GLIBCXX_BEGIN_NAMESPACE_VERSION @@ -193,3 +190,4 @@ namespace _GLIBCXX_END_NAMESPACE_VERSION } +#endif // ! _GLIBCXX_USE_CXX11_ABI diff --git a/libstdc++-v3/src/c++11/cow-sstream-inst.cc b/libstdc++-v3/src/c++11/cow-sstream-inst.cc index 8839f4a6f75..2db78a43f50 100644 --- a/libstdc++-v3/src/c++11/cow-sstream-inst.cc +++ b/libstdc++-v3/src/c++11/cow-sstream-inst.cc @@ -27,8 +27,8 @@ // #define _GLIBCXX_USE_CXX11_ABI 0 -#include "sstream-inst.cc" +#include -#if ! _GLIBCXX_USE_DUAL_ABI -# error This file should not be compiled for this configuration. +#if ! _GLIBCXX_USE_CXX11_ABI +# include "sstream-inst.cc" #endif diff --git a/libstdc++-v3/src/c++11/cow-stdexcept.cc b/libstdc++-v3/src/c++11/cow-stdexcept.cc index 9e8787485eb..8b217c45960 100644 --- a/libstdc++-v3/src/c++11/cow-stdexcept.cc +++ b/libstdc++-v3/src/c++11/cow-stdexcept.cc @@ -41,7 +41,7 @@ _txnal_logic_error_get_msg(void* e); void* _txnal_runtime_error_get_msg(void* e); -// All exception classes still use the classic COW std::string. +// In dual abi all exception classes still use the classic COW std::string. #define _GLIBCXX_USE_CXX11_ABI 0 #define _GLIBCXX_DEFINE_STDEXCEPT_COPY_OPS 1 #define __cow_string __cow_stringxxx @@ -169,6 +169,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION "alignof(std::string) has changed"); #endif +#if ! _GLIBCXX_USE_CXX11_ABI // Return error_category::message() as an SSO string __sso_string error_category::_M_message(int i) const @@ -176,10 +177,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION string msg = this->message(i); return {msg.c_str(), msg.length()}; } +#endif _GLIBCXX_END_NAMESPACE_VERSION } // namespace +#if ! _GLIBCXX_USE_CXX11_ABI // Support for the Transactional Memory TS (N4514). // // logic_error and runtime_error both carry a message in the form of a COW @@ -463,3 +466,4 @@ CTORDTOR(15underflow_error, std::underflow_error, runtime_error) #endif // _GLIBCXX_USE_C99_STDINT_TR1 #endif // _GLIBCXX_USE_WEAK_REF +#endif // ! _GLIBCXX_USE_CXX11_ABI diff --git a/libstdc++-v3/src/c++11/cow-string-inst.cc b/libstdc++-v3/src/c++11/cow-string-inst.cc index e5331bb029a..40ebe708971 100644 --- a/libstdc++-v3/src/c++11/cow-string-inst.cc +++ b/libstdc++-v3/src/c++11/cow-string-inst.cc @@ -27,11 +27,10 @@ // #define _GLIBCXX_USE_CXX11_ABI 0 -#include "string-inst.cc" +#include -#if ! _GLIBCXX_USE_DUAL_ABI -# error This file should not be compiled for this configuration. -#endif +#if ! _GLIBCXX_USE_CXX11_ABI +#include "string-inst.cc" #ifdef _GLIBCXX_USE_C99_STDINT_TR1 #include @@ -47,3 +46,4 @@ namespace std _GLIBCXX_VISIBILITY(default) { _M_init(token.c_str(), token.length()); } } // namespace #endif +#endif diff --git a/libstdc++-v3/src/c++11/cow-string-io-inst.cc b/libstdc++-v3/src/c++11/cow-string-io-inst.cc index 3f65aeb9873..a3720680907 100644 --- a/libstdc++-v3/src/c++11/cow-string-io-inst.cc +++ b/libstdc++-v3/src/c++11/cow-string-io-inst.cc @@ -30,10 +30,7 @@ #include #include -#if ! _GLIBCXX_USE_DUAL_ABI -# error This file should not be compiled for this configuration. -#endif - +#if ! _GLIBCXX_USE_CXX11_ABI namespace std _GLIBCXX_VISIBILITY(default) { _GLIBCXX_BEGIN_NAMESPACE_VERSION @@ -57,3 +54,4 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION _GLIBCXX_END_NAMESPACE_VERSION } // namespace +#endif diff --git a/libstdc++-v3/src/c++11/cow-wstring-inst.cc b/libstdc++-v3/src/c++11/cow-wstring-inst.cc index a38c1288ef3..b0eff7ef97d 100644 --- a/libstdc++-v3/src/c++11/cow-wstring-inst.cc +++ b/libstdc++-v3/src/c++11/cow-wstring-inst.cc @@ -29,12 +29,9 @@ #define _GLIBCXX_USE_CXX11_ABI 0 #include +#if ! _GLIBCXX_USE_CXX11_ABI #ifdef _GLIBCXX_USE_WCHAR_T #define C wchar_t #include "string-inst.cc" - -#if ! _GLIBCXX_USE_DUAL_ABI -# error This file should not be compiled for this configuration. #endif - #endif diff --git a/libstdc++-v3/src/c++11/cow-wstring-io-inst.cc b/libstdc++-v3/src/c++11/cow-wstring-io-inst.cc index dbd19e0feb0..f0ed5cc6b6b 100644 --- a/libstdc++-v3/src/c++11/cow-wstring-io-inst.cc +++ b/libstdc++-v3/src/c++11/cow-wstring-io-inst.cc @@ -29,14 +29,11 @@ #define _GLIBCXX_USE_CXX11_ABI 0 #include +#if ! _GLIBCXX_USE_CXX11_ABI #ifdef _GLIBCXX_USE_WCHAR_T #include #include -#if ! _GLIBCXX_USE_DUAL_ABI -# error This file should not be compiled for this configuration. -#endif - namespace std _GLIBCXX_VISIBILITY(default) { _GLIBCXX_BEGIN_NAMESPACE_VERSION @@ -61,3 +58,4 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION _GLIBCXX_END_NAMESPACE_VERSION } // namespace #endif +#endif diff --git a/libstdc++-v3/src/c++11/cxx11-hash_tr1.cc b/libstdc++-v3/src/c++11/cxx11-hash_tr1.cc index f36541fd4cc..edd89974e1b 100644 --- a/libstdc++-v3/src/c++11/cxx11-hash_tr1.cc +++ b/libstdc++-v3/src/c++11/cxx11-hash_tr1.cc @@ -25,9 +25,7 @@ #define _GLIBCXX_USE_CXX11_ABI 1 #include -#if ! _GLIBCXX_USE_DUAL_ABI -# error This file should not be compiled for this configuration. -#endif +#if _GLIBCXX_USE_CXX11_ABI #include namespace std _GLIBCXX_VISIBILITY(default) @@ -57,3 +55,5 @@ namespace std _GLIBCXX_VISIBILITY(default) #endif } } + +#endif // _GLIBCXX_USE_CXX11_ABI diff --git a/libstdc++-v3/src/c++11/cxx11-ios_failure.cc b/libstdc++-v3/src/c++11/cxx11-ios_failure.cc index 0a81e15e4c0..db4c623a536 100644 --- a/libstdc++-v3/src/c++11/cxx11-ios_failure.cc +++ b/libstdc++-v3/src/c++11/cxx11-ios_failure.cc @@ -38,9 +38,7 @@ # define _(msgid) (msgid) #endif -#if ! _GLIBCXX_USE_DUAL_ABI -# error This file should not be compiled for this configuration. -#endif +#if _GLIBCXX_USE_CXX11_ABI namespace std _GLIBCXX_VISIBILITY(default) { @@ -62,7 +60,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION ios_base::failure::what() const throw() { return runtime_error::what(); } -#if __cpp_rtti +#if _GLIBCXX_USE_DUAL_ABI && __cpp_rtti // These functions are defined in src/c++98/ios_failure.cc extern void __construct_ios_failure(void*, const char*); extern void __destroy_ios_failure(void*); @@ -118,7 +116,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION // Otherwise proceed as normal to see if the handler matches. return __class_type_info::__do_upcast(dst_type, obj_ptr); } -#else // ! __cpp_rtti +#else // ! _GLIBCXX_USE_DUAL_ABI || ! __cpp_rtti using __ios_failure = ios::failure; #endif @@ -136,3 +134,5 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION _GLIBCXX_END_NAMESPACE_VERSION } // namespace + +#endif // _GLIBCXX_USE_CXX11_ABI diff --git a/libstdc++-v3/src/c++11/cxx11-locale-inst.cc b/libstdc++-v3/src/c++11/cxx11-locale-inst.cc index 5c860054ea6..814cdcc9902 100644 --- a/libstdc++-v3/src/c++11/cxx11-locale-inst.cc +++ b/libstdc++-v3/src/c++11/cxx11-locale-inst.cc @@ -27,11 +27,5 @@ // Facet instantiations using new ABI strings. #define _GLIBCXX_USE_CXX11_ABI 1 -#include -#if ! _GLIBCXX_USE_DUAL_ABI -# error This file should not be compiled for this configuration. -#endif -#define C char -#define C_is_char -# include "locale-inst.cc" +#include "locale-inst.cc" diff --git a/libstdc++-v3/src/c++11/cxx11-stdexcept.cc b/libstdc++-v3/src/c++11/cxx11-stdexcept.cc index 236bc40cd55..9faf355977a 100644 --- a/libstdc++-v3/src/c++11/cxx11-stdexcept.cc +++ b/libstdc++-v3/src/c++11/cxx11-stdexcept.cc @@ -29,9 +29,7 @@ #define _GLIBCXX_USE_CXX11_ABI 1 #include -#if ! _GLIBCXX_USE_DUAL_ABI -# error This file should not be compiled for this configuration. -#endif +#if _GLIBCXX_USE_CXX11_ABI namespace std _GLIBCXX_VISIBILITY(default) { @@ -70,9 +68,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION underflow_error::underflow_error(const string& __arg) : runtime_error(__arg) { } +# if _GLIBCXX_USE_DUAL_ABI // Converting constructor from ABI-tagged std::string to COW string. __cow_string::__cow_string(const string& s) : __cow_string(s.c_str(), s.length()) { } +# endif _GLIBCXX_END_NAMESPACE_VERSION } // namespace + +#endif // _GLIBCXX_USE_CXX11_ABI diff --git a/libstdc++-v3/src/c++11/cxx11-wlocale-inst.cc b/libstdc++-v3/src/c++11/cxx11-wlocale-inst.cc index 6d26292075d..7491d5117df 100644 --- a/libstdc++-v3/src/c++11/cxx11-wlocale-inst.cc +++ b/libstdc++-v3/src/c++11/cxx11-wlocale-inst.cc @@ -28,11 +28,10 @@ #define _GLIBCXX_USE_CXX11_ABI 1 #include -#if ! _GLIBCXX_USE_DUAL_ABI -# error This file should not be compiled for this configuration. -#endif -#ifdef _GLIBCXX_USE_WCHAR_T -#define C wchar_t -#include "locale-inst.cc" +#if _GLIBCXX_USE_CXX11_ABI +# ifdef _GLIBCXX_USE_WCHAR_T +# define C wchar_t +# include "locale-inst.cc" +# endif #endif diff --git a/libstdc++-v3/src/c++11/fstream-inst.cc b/libstdc++-v3/src/c++11/fstream-inst.cc index 7bf56c7e864..494c7bb51d0 100644 --- a/libstdc++-v3/src/c++11/fstream-inst.cc +++ b/libstdc++-v3/src/c++11/fstream-inst.cc @@ -29,6 +29,7 @@ #define _GLIBCXX_USE_CXX11_ABI 1 #include +#if _GLIBCXX_USE_CXX11_ABI namespace std _GLIBCXX_VISIBILITY(default) { _GLIBCXX_BEGIN_NAMESPACE_VERSION @@ -47,3 +48,4 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION _GLIBCXX_END_NAMESPACE_VERSION } // namespace +#endif diff --git a/libstdc++-v3/src/c++11/locale-inst-numeric.h b/libstdc++-v3/src/c++11/locale-inst-numeric.h index 1417ac25ed4..5b72c30bd5a 100644 --- a/libstdc++-v3/src/c++11/locale-inst-numeric.h +++ b/libstdc++-v3/src/c++11/locale-inst-numeric.h @@ -23,12 +23,12 @@ // . #ifndef C -#define "This file should not be compiled directly, only included" +# error "This file should not be compiled directly, only included" #endif namespace std _GLIBCXX_VISIBILITY(default) { -#if ! _GLIBCXX_USE_CXX11_ABI +#if ! _GLIBCXX_USE_CXX11_ABI || ! _GLIBCXX_USE_DUAL_ABI template const num_get& use_facet >(const locale&); template const num_put& use_facet >(const locale&); @@ -38,7 +38,7 @@ namespace std _GLIBCXX_VISIBILITY(default) _GLIBCXX_BEGIN_NAMESPACE_LDBL -#if ! _GLIBCXX_USE_CXX11_ABI +#if ! _GLIBCXX_USE_CXX11_ABI || ! _GLIBCXX_USE_DUAL_ABI template class num_get >; template class num_put >; #endif @@ -88,7 +88,7 @@ _GLIBCXX_BEGIN_NAMESPACE_LDBL unsigned long long&) const; #endif -#if ! _GLIBCXX_USE_CXX11_ABI +#if ! _GLIBCXX_USE_CXX11_ABI || ! _GLIBCXX_USE_DUAL_ABI // num_put member function templates template ostreambuf_iterator diff --git a/libstdc++-v3/src/c++11/locale-inst.cc b/libstdc++-v3/src/c++11/locale-inst.cc index 3aee5df9b04..30847cbef7f 100644 --- a/libstdc++-v3/src/c++11/locale-inst.cc +++ b/libstdc++-v3/src/c++11/locale-inst.cc @@ -35,8 +35,17 @@ # define _GLIBCXX_USE_CXX11_ABI 0 #endif -#include +#if _GLIBCXX_USE_CXX11_ABI +# define _GLIBCXX_BUILD_CXX11_ABI 1 +#else +# define _GLIBCXX_BUILD_CXX11_ABI 0 +#endif + +#include +#if _GLIBCXX_BUILD_CXX11_ABI == _GLIBCXX_USE_CXX11_ABI + +#include // Instantiation configuration. #ifndef C # define C char @@ -51,7 +60,7 @@ namespace std _GLIBCXX_VISIBILITY(default) _GLIBCXX_BEGIN_NAMESPACE_VERSION // moneypunct, money_get, and money_put -#if ! _GLIBCXX_USE_CXX11_ABI +#if ! _GLIBCXX_USE_CXX11_ABI || ! _GLIBCXX_USE_DUAL_ABI template struct __moneypunct_cache; template struct __moneypunct_cache; #endif @@ -63,7 +72,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CXX11 _GLIBCXX_END_NAMESPACE_CXX11 // numpunct, numpunct_byname, num_get, and num_put -#if ! _GLIBCXX_USE_CXX11_ABI +#if ! _GLIBCXX_USE_CXX11_ABI || ! _GLIBCXX_USE_DUAL_ABI template struct __numpunct_cache; #endif _GLIBCXX_BEGIN_NAMESPACE_CXX11 @@ -72,7 +81,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CXX11 _GLIBCXX_END_NAMESPACE_CXX11 // time_get and time_put -#if ! _GLIBCXX_USE_CXX11_ABI +#if ! _GLIBCXX_USE_CXX11_ABI || ! _GLIBCXX_USE_DUAL_ABI template class __timepunct; template struct __timepunct_cache; template class time_put >; @@ -96,13 +105,13 @@ _GLIBCXX_END_NAMESPACE_CXX11 ctype_byname::ctype_byname(const string& __s, size_t __refs) : ctype_byname(__s.c_str(), __refs) { } -#if ! _GLIBCXX_USE_CXX11_ABI +#if ! _GLIBCXX_USE_CXX11_ABI || ! _GLIBCXX_USE_DUAL_ABI inline template class __ctype_abstract_base; template class ctype_byname; #endif // codecvt -#if ! _GLIBCXX_USE_CXX11_ABI +#if ! _GLIBCXX_USE_CXX11_ABI || ! _GLIBCXX_USE_DUAL_ABI inline template class __codecvt_abstract_base; template class codecvt_byname; #else @@ -117,7 +126,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CXX11 _GLIBCXX_END_NAMESPACE_CXX11 // use_facet -#if ! _GLIBCXX_USE_CXX11_ABI +#if ! _GLIBCXX_USE_CXX11_ABI || ! _GLIBCXX_USE_DUAL_ABI template const ctype& use_facet >(const locale&); @@ -143,7 +152,7 @@ _GLIBCXX_END_NAMESPACE_CXX11 const moneypunct& use_facet >(const locale&); -#if ! _GLIBCXX_USE_CXX11_ABI +#if ! _GLIBCXX_USE_CXX11_ABI || ! _GLIBCXX_USE_DUAL_ABI template const __timepunct& use_facet<__timepunct >(const locale&); @@ -162,7 +171,7 @@ _GLIBCXX_END_NAMESPACE_CXX11 use_facet >(const locale&); // has_facet -#if ! _GLIBCXX_USE_CXX11_ABI +#if ! _GLIBCXX_USE_CXX11_ABI || ! _GLIBCXX_USE_DUAL_ABI template bool has_facet >(const locale&); @@ -184,7 +193,7 @@ _GLIBCXX_END_NAMESPACE_CXX11 bool has_facet >(const locale&); -#if ! _GLIBCXX_USE_CXX11_ABI +#if ! _GLIBCXX_USE_CXX11_ABI || ! _GLIBCXX_USE_DUAL_ABI template bool has_facet<__timepunct >(const locale&); @@ -203,7 +212,7 @@ _GLIBCXX_END_NAMESPACE_CXX11 has_facet >(const locale&); -#if ! _GLIBCXX_USE_CXX11_ABI +#if ! _GLIBCXX_USE_CXX11_ABI || ! _GLIBCXX_USE_DUAL_ABI // locale functions. template C* @@ -228,7 +237,11 @@ _GLIBCXX_END_NAMESPACE_CXX11 _GLIBCXX_END_NAMESPACE_VERSION } // namespace +#if ! _GLIBCXX_INLINE_VERSION // XXX GLIBCXX_ABI Deprecated -#if defined _GLIBCXX_LONG_DOUBLE_COMPAT && ! _GLIBCXX_USE_CXX11_ABI -#include "compatibility-ldbl-facets-aliases.h" -#endif // _GLIBCXX_LONG_DOUBLE_COMPAT +# if defined _GLIBCXX_LONG_DOUBLE_COMPAT && ! _GLIBCXX_USE_CXX11_ABI +# include "compatibility-ldbl-facets-aliases.h" +# endif // _GLIBCXX_LONG_DOUBLE_COMPAT +#endif + +#endif // _GLIBCXX_BUILD_CXX11_ABI == _GLIBCXX_USE_CXX11_ABI diff --git a/libstdc++-v3/src/c++11/wlocale-inst.cc b/libstdc++-v3/src/c++11/wlocale-inst.cc index 0855f67707c..0338a9554a2 100644 --- a/libstdc++-v3/src/c++11/wlocale-inst.cc +++ b/libstdc++-v3/src/c++11/wlocale-inst.cc @@ -30,7 +30,9 @@ #define _GLIBCXX_USE_CXX11_ABI 0 #include -#ifdef _GLIBCXX_USE_WCHAR_T -#define C wchar_t -#include "locale-inst.cc" -#endif // _GLIBCXX_USE_WCHAR_T +#if ! _GLIBCXX_USE_CXX11_ABI +# ifdef _GLIBCXX_USE_WCHAR_T +# define C wchar_t +# include "locale-inst.cc" +# endif // _GLIBCXX_USE_WCHAR_T +#endif diff --git a/libstdc++-v3/src/c++98/Makefile.am b/libstdc++-v3/src/c++98/Makefile.am index b96588bd95c..9bbe8c00a73 100644 --- a/libstdc++-v3/src/c++98/Makefile.am +++ b/libstdc++-v3/src/c++98/Makefile.am @@ -90,13 +90,6 @@ c++locale.cc: ${glibcxx_srcdir}/$(CLOCALE_CC) basic_file.cc: ${glibcxx_srcdir}/$(BASIC_FILE_CC) $(LN_S) ${glibcxx_srcdir}/$(BASIC_FILE_CC) ./$@ || true -if ENABLE_DUAL_ABI -cxx11_abi_sources = \ - cow-istream-string.cc -else -cxx11_abi_sources = -endif - if ENABLE_EXTERN_TEMPLATE # XTEMPLATE_FLAGS = -fno-implicit-templates inst_sources = \ @@ -118,6 +111,7 @@ sources = \ mt_allocator.cc \ codecvt.cc \ complex_io.cc \ + cow-istream-string.cc \ globals_io.cc \ hash_tr1.cc \ hashtable_tr1.cc \ @@ -142,7 +136,6 @@ sources = \ istream-string.cc \ streambuf.cc \ valarray.cc \ - ${cxx11_abi_sources} \ ${host_sources} \ ${host_sources_extra} diff --git a/libstdc++-v3/src/c++98/Makefile.in b/libstdc++-v3/src/c++98/Makefile.in index 90eff5da986..aafc04efe89 100644 --- a/libstdc++-v3/src/c++98/Makefile.in +++ b/libstdc++-v3/src/c++98/Makefile.in @@ -122,30 +122,29 @@ CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libc__98convenience_la_LIBADD = -@ENABLE_DUAL_ABI_TRUE@am__objects_1 = cow-istream-string.lo -@ENABLE_DUAL_ABI_TRUE@am__objects_2 = collate_members_cow.lo \ +@ENABLE_DUAL_ABI_TRUE@am__objects_1 = collate_members_cow.lo \ @ENABLE_DUAL_ABI_TRUE@ messages_members_cow.lo \ @ENABLE_DUAL_ABI_TRUE@ monetary_members_cow.lo \ @ENABLE_DUAL_ABI_TRUE@ numeric_members_cow.lo -am__objects_3 = $(am__objects_2) codecvt_members.lo collate_members.lo \ +am__objects_2 = $(am__objects_1) codecvt_members.lo collate_members.lo \ messages_members.lo monetary_members.lo numeric_members.lo \ time_members.lo -@ENABLE_EXTERN_TEMPLATE_TRUE@am__objects_4 = allocator-inst.lo \ +@ENABLE_EXTERN_TEMPLATE_TRUE@am__objects_3 = allocator-inst.lo \ @ENABLE_EXTERN_TEMPLATE_TRUE@ concept-inst.lo ext-inst.lo \ @ENABLE_EXTERN_TEMPLATE_TRUE@ misc-inst.lo -am__objects_5 = parallel_settings.lo -am__objects_6 = basic_file.lo c++locale.lo $(am__objects_4) \ - $(am__objects_5) -am__objects_7 = bitmap_allocator.lo pool_allocator.lo mt_allocator.lo \ - codecvt.lo complex_io.lo globals_io.lo hash_tr1.lo \ - hashtable_tr1.lo ios_failure.lo ios_init.lo ios_locale.lo \ - list.lo list-aux.lo list-aux-2.lo list_associated.lo \ - list_associated-2.lo locale.lo locale_init.lo locale_facets.lo \ - localename.lo math_stubs_float.lo math_stubs_long_double.lo \ - stdexcept.lo strstream.lo tree.lo istream.lo istream-string.lo \ - streambuf.lo valarray.lo $(am__objects_1) $(am__objects_3) \ - $(am__objects_6) -am_libc__98convenience_la_OBJECTS = $(am__objects_7) +am__objects_4 = parallel_settings.lo +am__objects_5 = basic_file.lo c++locale.lo $(am__objects_3) \ + $(am__objects_4) +am__objects_6 = bitmap_allocator.lo pool_allocator.lo mt_allocator.lo \ + codecvt.lo complex_io.lo cow-istream-string.lo globals_io.lo \ + hash_tr1.lo hashtable_tr1.lo ios_failure.lo ios_init.lo \ + ios_locale.lo list.lo list-aux.lo list-aux-2.lo \ + list_associated.lo list_associated-2.lo locale.lo \ + locale_init.lo locale_facets.lo localename.lo \ + math_stubs_float.lo math_stubs_long_double.lo stdexcept.lo \ + strstream.lo tree.lo istream.lo istream-string.lo streambuf.lo \ + valarray.lo $(am__objects_2) $(am__objects_5) +am_libc__98convenience_la_OBJECTS = $(am__objects_6) libc__98convenience_la_OBJECTS = $(am_libc__98convenience_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) @@ -470,10 +469,6 @@ host_sources_extra = \ basic_file.cc c++locale.cc \ ${inst_sources} ${parallel_sources} -@ENABLE_DUAL_ABI_FALSE@cxx11_abi_sources = -@ENABLE_DUAL_ABI_TRUE@cxx11_abi_sources = \ -@ENABLE_DUAL_ABI_TRUE@ cow-istream-string.cc - # XTEMPLATE_FLAGS = @ENABLE_EXTERN_TEMPLATE_FALSE@inst_sources = @@ -493,6 +488,7 @@ sources = \ mt_allocator.cc \ codecvt.cc \ complex_io.cc \ + cow-istream-string.cc \ globals_io.cc \ hash_tr1.cc \ hashtable_tr1.cc \ @@ -517,7 +513,6 @@ sources = \ istream-string.cc \ streambuf.cc \ valarray.cc \ - ${cxx11_abi_sources} \ ${host_sources} \ ${host_sources_extra} diff --git a/libstdc++-v3/src/c++98/cow-istream-string.cc b/libstdc++-v3/src/c++98/cow-istream-string.cc index d90ec2a0cf3..ff406830c61 100644 --- a/libstdc++-v3/src/c++98/cow-istream-string.cc +++ b/libstdc++-v3/src/c++98/cow-istream-string.cc @@ -27,4 +27,8 @@ // #define _GLIBCXX_USE_CXX11_ABI 0 -#include "istream-string.cc" +#include + +#if ! _GLIBCXX_USE_CXX11_ABI +# include "istream-string.cc" +#endif diff --git a/libstdc++-v3/src/c++98/hash_tr1.cc b/libstdc++-v3/src/c++98/hash_tr1.cc index caa424e423f..7256d2529cf 100644 --- a/libstdc++-v3/src/c++98/hash_tr1.cc +++ b/libstdc++-v3/src/c++98/hash_tr1.cc @@ -28,6 +28,7 @@ #include "hash-long-double-tr1-aux.cc" +#if ! _GLIBCXX_USE_CXX11_ABI namespace std _GLIBCXX_VISIBILITY(default) { namespace tr1 @@ -57,3 +58,4 @@ namespace std _GLIBCXX_VISIBILITY(default) #endif } } +#endif // ! _GLIBCXX_USE_CXX11_ABI diff --git a/libstdc++-v3/src/c++98/ios_failure.cc b/libstdc++-v3/src/c++98/ios_failure.cc index 523d1f6a4e9..7fea41af56c 100644 --- a/libstdc++-v3/src/c++98/ios_failure.cc +++ b/libstdc++-v3/src/c++98/ios_failure.cc @@ -29,22 +29,24 @@ #define _GLIBCXX_USE_CXX11_ABI 0 #include -#if _GLIBCXX_USE_DUAL_ABI && __cpp_rtti -#include -#include -#endif - -#ifdef _GLIBCXX_USE_NLS -# include -# define _(msgid) gettext (msgid) -#else -# define _(msgid) (msgid) -#endif +#if ! _GLIBCXX_USE_CXX11_ABI || ! _GLIBCXX_USE_DUAL_ABI +# if _GLIBCXX_USE_DUAL_ABI && __cpp_rtti +# include +# include +# endif + +# ifdef _GLIBCXX_USE_NLS +# include +# define _(msgid) gettext (msgid) +# else +# define _(msgid) (msgid) +# endif namespace std _GLIBCXX_VISIBILITY(default) { _GLIBCXX_BEGIN_NAMESPACE_VERSION +# if ! _GLIBCXX_USE_CXX11_ABI ios_base::failure::failure(const string& __str) throw() : _M_msg(__str) { } @@ -54,11 +56,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION const char* ios_base::failure::what() const throw() { return _M_msg.c_str(); } +# endif -#if _GLIBCXX_USE_DUAL_ABI +# if _GLIBCXX_USE_DUAL_ABI // When the dual ABI is enabled __throw_ios_failure() is defined in // src/c++11/cxx11-ios_failure.cc -#if __cpp_rtti +# if __cpp_rtti // If RTTI is enabled the exception type thrown will use these functions to // construct/destroy a gcc4-compatible ios::failure object in a buffer, // and to catch that object via a handler of the gcc4-compatible type. @@ -80,9 +83,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION typedef char S[1 / (sizeof(ios::failure) <= sizeof(runtime_error))]; typedef char A[1 / (__alignof(ios::failure) <= __alignof(runtime_error))]; } -#endif // __cpp_rtti +# endif // __cpp_rtti -#else // ! _GLIBCXX_USE_DUAL_ABI +# elif ! _GLIBCXX_USE_CXX11_ABI void __throw_ios_failure(const char* __s __attribute__((unused))) @@ -92,7 +95,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION __throw_ios_failure(const char* str, int) { __throw_ios_failure(str); } -#endif // _GLIBCXX_USE_DUAL_ABI +# endif // _GLIBCXX_USE_DUAL_ABI _GLIBCXX_END_NAMESPACE_VERSION } // namespace + +#endif // ! _GLIBCXX_USE_CXX11_ABI || ! _GLIBCXX_USE_DUAL_ABI diff --git a/libstdc++-v3/src/c++98/istream-string.cc b/libstdc++-v3/src/c++98/istream-string.cc index 19f5f0c1a47..034cd951d6d 100644 --- a/libstdc++-v3/src/c++98/istream-string.cc +++ b/libstdc++-v3/src/c++98/istream-string.cc @@ -31,6 +31,16 @@ // by another file which defines _GLIBCXX_USE_CXX11_ABI=0. # define _GLIBCXX_USE_CXX11_ABI 1 #endif + +#if _GLIBCXX_USE_CXX11_ABI +# define _GLIBCXX_BUILD_CXX11_ABI 1 +#else +# define _GLIBCXX_BUILD_CXX11_ABI 0 +#endif + +#include + +#if _GLIBCXX_BUILD_CXX11_ABI == _GLIBCXX_USE_CXX11_ABI #include #include @@ -289,3 +299,4 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION _GLIBCXX_END_NAMESPACE_VERSION } // namespace +#endif // _GLIBCXX_BUILD_CXX11_ABI == _GLIBCXX_USE_CXX11_ABI diff --git a/libstdc++-v3/src/c++98/locale_facets.cc b/libstdc++-v3/src/c++98/locale_facets.cc index 1293a37e642..4b351b2e8ef 100644 --- a/libstdc++-v3/src/c++98/locale_facets.cc +++ b/libstdc++-v3/src/c++98/locale_facets.cc @@ -125,6 +125,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION return __test; } +#if ! _GLIBCXX_USE_CXX11_ABI bool __verify_grouping(const char* __grouping, size_t __grouping_size, const string& __grouping_tmp) throw() @@ -133,6 +134,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION __grouping_tmp.c_str(), __grouping_tmp.size()); } +#endif namespace { diff --git a/libstdc++-v3/src/c++98/stdexcept.cc b/libstdc++-v3/src/c++98/stdexcept.cc index 0a24b054ca0..786f0ff0523 100644 --- a/libstdc++-v3/src/c++98/stdexcept.cc +++ b/libstdc++-v3/src/c++98/stdexcept.cc @@ -26,7 +26,7 @@ // ISO C++ 14882: 19.1 Exception classes // -// All exception classes still use the classic COW std::string. +// In dual abi all exception classes still use the classic COW std::string. #define _GLIBCXX_USE_CXX11_ABI 0 #include #include @@ -35,8 +35,10 @@ namespace std _GLIBCXX_VISIBILITY(default) { _GLIBCXX_BEGIN_NAMESPACE_VERSION +#if ! _GLIBCXX_USE_CXX11_ABI logic_error::logic_error(const string& __arg) : exception(), _M_msg(__arg) { } +#endif logic_error::~logic_error() _GLIBCXX_USE_NOEXCEPT { } @@ -44,28 +46,38 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION logic_error::what() const _GLIBCXX_USE_NOEXCEPT { return _M_msg.c_str(); } +#if ! _GLIBCXX_USE_CXX11_ABI domain_error::domain_error(const string& __arg) : logic_error(__arg) { } +#endif domain_error::~domain_error() _GLIBCXX_USE_NOEXCEPT { } +#if ! _GLIBCXX_USE_CXX11_ABI invalid_argument::invalid_argument(const string& __arg) : logic_error(__arg) { } +#endif invalid_argument::~invalid_argument() _GLIBCXX_USE_NOEXCEPT { } +#if ! _GLIBCXX_USE_CXX11_ABI length_error::length_error(const string& __arg) : logic_error(__arg) { } +#endif length_error::~length_error() _GLIBCXX_USE_NOEXCEPT { } +#if ! _GLIBCXX_USE_CXX11_ABI out_of_range::out_of_range(const string& __arg) : logic_error(__arg) { } +#endif out_of_range::~out_of_range() _GLIBCXX_USE_NOEXCEPT { } +#if ! _GLIBCXX_USE_CXX11_ABI runtime_error::runtime_error(const string& __arg) : exception(), _M_msg(__arg) { } +#endif runtime_error::~runtime_error() _GLIBCXX_USE_NOEXCEPT { } @@ -73,18 +85,24 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION runtime_error::what() const _GLIBCXX_USE_NOEXCEPT { return _M_msg.c_str(); } +#if ! _GLIBCXX_USE_CXX11_ABI range_error::range_error(const string& __arg) : runtime_error(__arg) { } +#endif range_error::~range_error() _GLIBCXX_USE_NOEXCEPT { } +#if ! _GLIBCXX_USE_CXX11_ABI overflow_error::overflow_error(const string& __arg) : runtime_error(__arg) { } +#endif overflow_error::~overflow_error() _GLIBCXX_USE_NOEXCEPT { } +#if ! _GLIBCXX_USE_CXX11_ABI underflow_error::underflow_error(const string& __arg) : runtime_error(__arg) { } +#endif underflow_error::~underflow_error() _GLIBCXX_USE_NOEXCEPT { }