libstdc++/71049 fix --disable-libstdcxx-dual-abi bootstrap
authorJonathan Wakely <jwakely@redhat.com>
Wed, 11 May 2016 12:39:28 +0000 (13:39 +0100)
committerJonathan Wakely <redi@gcc.gnu.org>
Wed, 11 May 2016 12:39:28 +0000 (13:39 +0100)
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
libstdc++-v3/src/c++11/cow-stdexcept.cc

index fdcb9cae2beb34cd08dbdf5f53f97569b50147bb..a9bea1e8f5d9925d59f0134d88b7285f1ef9bf15 100644 (file)
@@ -1,3 +1,9 @@
+2016-05-11  Jonathan Wakely  <jwakely@redhat.com>
+
+       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  <jwakely@redhat.com>
 
        * include/experimental/bits/fs_dir.h (begin, end): Add noexcept.
index a0f505c218755ca522a6f8066a73a3e08375d3f1..31a89dfd5541aba4253f7d6de44012905780ab9f 100644 (file)
@@ -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<char* const*>(
          &((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)); }               \