diff --git a/libcxx/include/string b/libcxx/include/string --- a/libcxx/include/string +++ b/libcxx/include/string @@ -2266,7 +2266,11 @@ if (this != &__str) { __copy_assign_alloc(__str); - return assign(__str.data(), __str.size()); + const bool __str_is_long = __str.__is_long(); + if (__str_is_long || __is_long()) { + return assign(__str.data(), __str.size()); + } + __r_.first().__r = __str.__r_.first().__r; } return *this; }