From 3d73ae6ea92ead3b4a0ed0965eea01ec6e97c52a Mon Sep 17 00:00:00 2001 From: Jonathan Wakely Date: Wed, 11 May 2016 13:39:28 +0100 Subject: [PATCH] libstdc++/71049 fix --disable-libstdcxx-dual-abi bootstrap PR libstdc++/71049 * src/c++11/cow-stdexcept.cc [!_GLIBCXX_USE_DUAL_ABI]: Don't define exception constructors with __sso_string parameters. From-SVN: r236118 --- libstdc++-v3/ChangeLog | 6 ++++ libstdc++-v3/src/c++11/cow-stdexcept.cc | 37 +++++++++++++------------ 2 files changed, 26 insertions(+), 17 deletions(-) diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index fdcb9cae2be..a9bea1e8f5d 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,9 @@ +2016-05-11 Jonathan Wakely + + PR libstdc++/71049 + * src/c++11/cow-stdexcept.cc [!_GLIBCXX_USE_DUAL_ABI]: Don't define + exception constructors with __sso_string parameters. + 2016-05-10 Jonathan Wakely * include/experimental/bits/fs_dir.h (begin, end): Add noexcept. diff --git a/libstdc++-v3/src/c++11/cow-stdexcept.cc b/libstdc++-v3/src/c++11/cow-stdexcept.cc index a0f505c2187..31a89dfd554 100644 --- a/libstdc++-v3/src/c++11/cow-stdexcept.cc +++ b/libstdc++-v3/src/c++11/cow-stdexcept.cc @@ -292,6 +292,7 @@ _txnal_cow_string_c_str(const void* that) return (const char*) txnal_read_ptr((void**)&bs->_M_dataplus._M_p); } +#if _GLIBCXX_USE_DUAL_ABI const char* _txnal_sso_string_c_str(const void* that) { @@ -299,6 +300,7 @@ _txnal_sso_string_c_str(const void* that) (void* const*)const_cast( &((const std::__sso_string*) that)->_M_s._M_p)); } +#endif void _txnal_cow_string_D1_commit(void* data) @@ -344,9 +346,24 @@ _txnal_runtime_error_get_msg(void* e) // result in undefined behavior, which is in this case not initializing this // string. #if _GLIBCXX_USE_DUAL_ABI -#define CTORDTORSTRINGCSTR(s) _txnal_sso_string_c_str((s)) +#define CTORS_FROM_SSOSTRING(NAME, CLASS, BASE) \ +void \ +_ZGTtNSt##NAME##C1ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE( \ + CLASS* that, const std::__sso_string& s) \ +{ \ + CLASS e(""); \ + _ITM_memcpyRnWt(that, &e, sizeof(CLASS)); \ + /* Get the C string from the SSO string. */ \ + _txnal_cow_string_C1_for_exceptions(_txnal_##BASE##_get_msg(that), \ + _txnal_sso_string_c_str(&s), that); \ +} \ +void \ +_ZGTtNSt##NAME##C2ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE( \ + CLASS*, const std::__sso_string&) __attribute__((alias \ +("_ZGTtNSt" #NAME \ + "C1ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE"))); #else -#define CTORDTORSTRINGCSTR(s) "" +#define CTORS_FROM_SSOSTRING(NAME, CLASS, BASE) #endif // This macro defines transaction constructors and destructors for a specific @@ -373,21 +390,7 @@ _ZGTtNSt##NAME##C1EPKc (CLASS* that, const char* s) \ void \ _ZGTtNSt##NAME##C2EPKc (CLASS*, const char*) \ __attribute__((alias ("_ZGTtNSt" #NAME "C1EPKc"))); \ -void \ -_ZGTtNSt##NAME##C1ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE( \ - CLASS* that, const std::__sso_string& s) \ -{ \ - CLASS e(""); \ - _ITM_memcpyRnWt(that, &e, sizeof(CLASS)); \ - /* Get the C string from the SSO string. */ \ - _txnal_cow_string_C1_for_exceptions(_txnal_##BASE##_get_msg(that), \ - CTORDTORSTRINGCSTR(&s), that); \ -} \ -void \ -_ZGTtNSt##NAME##C2ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE( \ - CLASS*, const std::__sso_string&) __attribute__((alias \ -("_ZGTtNSt" #NAME \ - "C1ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE"))); \ +CTORS_FROM_SSOSTRING(NAME, CLASS, BASE) \ void \ _ZGTtNSt##NAME##D1Ev(CLASS* that) \ { _txnal_cow_string_D1(_txnal_##BASE##_get_msg(that)); } \ -- 2.30.2