Fixed <rdar://problem/9969674>

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/branches/apple@137860 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/include/string b/include/string
index d1b9a5e..6371316 100644
--- a/include/string
+++ b/include/string
@@ -1578,6 +1578,27 @@
 #endif
 
     _LIBCPP_INLINE_VISIBILITY
+    void
+    __move_assign_alloc(const basic_string& __str)
+        _NOEXCEPT_(
+            !__alloc_traits::propagate_on_container_move_assignment::value ||
+            is_nothrow_move_assignable<allocator_type>::value)
+    {__move_assign_alloc(__str, integral_constant<bool,
+                      __alloc_traits::propagate_on_container_move_assignment::value>());}
+
+    _LIBCPP_INLINE_VISIBILITY
+    void __move_assign_alloc(const basic_string& __c, true_type)
+        _NOEXCEPT_(is_nothrow_move_assignable<allocator_type>::value)
+        {
+            __alloc() = _VSTD::move(__c.__alloc());
+        }
+
+    _LIBCPP_INLINE_VISIBILITY
+    void __move_assign_alloc(const basic_string& __c, false_type)
+        _NOEXCEPT
+        {}
+
+    _LIBCPP_INLINE_VISIBILITY
     static void __swap_alloc(allocator_type& __x, allocator_type& __y)
         _NOEXCEPT_(!__alloc_traits::propagate_on_container_swap::value ||
                    __is_nothrow_swappable<allocator_type>::value)
@@ -2120,7 +2141,8 @@
 {
     clear();
     shrink_to_fit();
-    __r_ = _VSTD::move(__str.__r_);
+    __r_.first() = __str.__r_.first();
+    __move_assign_alloc(__str);
     __str.__zero();
 }