diff --git a/libcxx/include/string b/libcxx/include/string --- a/libcxx/include/string +++ b/libcxx/include/string @@ -1529,15 +1529,16 @@ size_type __align_it(size_type __s) _NOEXCEPT {return (__s + (__a-1)) & ~(__a-1);} enum {__alignment = 16}; - static _LIBCPP_INLINE_VISIBILITY + static _LIBCPP_HIDE_FROM_ABI size_type __recommend(size_type __s) _NOEXCEPT - { - if (__s < __min_cap) return static_cast(__min_cap) - 1; - size_type __guess = __align_it (__s+1) - 1; - if (__guess == __min_cap) ++__guess; + { + if (__s < __min_cap) + return static_cast(__min_cap); + size_type __guess = __align_it (__s + 1); + if (__guess == __min_cap) + ++__guess; return __guess; - } + } inline void __init(const value_type* __s, size_type __sz, size_type __reserve); @@ -1830,12 +1831,12 @@ else { size_type __cap = __recommend(__reserve); - __p = __alloc_traits::allocate(__alloc(), __cap+1); + __p = __alloc_traits::allocate(__alloc(), __cap); __set_long_pointer(__p); - __set_long_cap(__cap+1); + __set_long_cap(__cap); __set_long_size(__sz); } - traits_type::copy(_VSTD::__to_address(__p), __s, __sz); + traits_type::copy(std::__to_address(__p), __s, __sz); traits_type::assign(__p[__sz], value_type()); } @@ -1854,12 +1855,12 @@ else { size_type __cap = __recommend(__sz); - __p = __alloc_traits::allocate(__alloc(), __cap+1); + __p = __alloc_traits::allocate(__alloc(), __cap); __set_long_pointer(__p); - __set_long_cap(__cap+1); + __set_long_cap(__cap); __set_long_size(__sz); } - traits_type::copy(_VSTD::__to_address(__p), __s, __sz); + traits_type::copy(std::__to_address(__p), __s, __sz); traits_type::assign(__p[__sz], value_type()); } @@ -1929,12 +1930,12 @@ if (__sz > max_size()) __throw_length_error(); size_t __cap = __recommend(__sz); - __p = __alloc_traits::allocate(__alloc(), __cap + 1); + __p = __alloc_traits::allocate(__alloc(), __cap); __set_long_pointer(__p); - __set_long_cap(__cap + 1); + __set_long_cap(__cap); __set_long_size(__sz); } - traits_type::copy(_VSTD::__to_address(__p), __s, __sz + 1); + traits_type::copy(std::__to_address(__p), __s, __sz + 1); } #ifndef _LIBCPP_CXX03_LANG @@ -1993,12 +1994,12 @@ else { size_type __cap = __recommend(__n); - __p = __alloc_traits::allocate(__alloc(), __cap+1); + __p = __alloc_traits::allocate(__alloc(), __cap); __set_long_pointer(__p); - __set_long_cap(__cap+1); + __set_long_cap(__cap); __set_long_size(__n); } - traits_type::assign(_VSTD::__to_address(__p), __n, __c); + traits_type::assign(std::__to_address(__p), __n, __c); traits_type::assign(__p[__n], value_type()); } @@ -2124,9 +2125,9 @@ else { size_type __cap = __recommend(__sz); - __p = __alloc_traits::allocate(__alloc(), __cap+1); + __p = __alloc_traits::allocate(__alloc(), __cap); __set_long_pointer(__p); - __set_long_cap(__cap+1); + __set_long_cap(__cap); __set_long_size(__sz); } @@ -2216,9 +2217,9 @@ __throw_length_error(); pointer __old_p = __get_pointer(); size_type __cap = __old_cap < __ms / 2 - __alignment ? - __recommend(_VSTD::max(__old_cap + __delta_cap, 2 * __old_cap)) : + __recommend(std::max(__old_cap + __delta_cap, 2 * __old_cap)) : __ms - 1; - pointer __p = __alloc_traits::allocate(__alloc(), __cap+1); + pointer __p = __alloc_traits::allocate(__alloc(), __cap); __invalidate_all_iterators(); if (__n_copy != 0) traits_type::copy(_VSTD::__to_address(__p), @@ -2232,7 +2233,7 @@ if (__old_cap+1 != __min_cap) __alloc_traits::deallocate(__alloc(), __old_p, __old_cap+1); __set_long_pointer(__p); - __set_long_cap(__cap+1); + __set_long_cap(__cap); __old_sz = __n_copy + __n_add + __sec_cp_sz; __set_long_size(__old_sz); traits_type::assign(__p[__old_sz], value_type()); @@ -2248,9 +2249,9 @@ __throw_length_error(); pointer __old_p = __get_pointer(); size_type __cap = __old_cap < __ms / 2 - __alignment ? - __recommend(_VSTD::max(__old_cap + __delta_cap, 2 * __old_cap)) : + __recommend(std::max(__old_cap + __delta_cap, 2 * __old_cap)) : __ms - 1; - pointer __p = __alloc_traits::allocate(__alloc(), __cap+1); + pointer __p = __alloc_traits::allocate(__alloc(), __cap); __invalidate_all_iterators(); if (__n_copy != 0) traits_type::copy(_VSTD::__to_address(__p), @@ -2263,7 +2264,7 @@ if (__old_cap+1 != __min_cap) __alloc_traits::deallocate(__alloc(), __old_p, __old_cap+1); __set_long_pointer(__p); - __set_long_cap(__cap+1); + __set_long_cap(__cap); } // assign @@ -3228,7 +3229,7 @@ size_type __target_capacity = _VSTD::max(__requested_capacity, size()); __target_capacity = __recommend(__target_capacity); - if (__target_capacity == capacity()) return; + if (__target_capacity == capacity() + 1) return; __shrink_or_extend(__target_capacity); } @@ -3239,7 +3240,7 @@ basic_string<_CharT, _Traits, _Allocator>::shrink_to_fit() _NOEXCEPT { size_type __target_capacity = __recommend(size()); - if (__target_capacity == capacity()) return; + if (__target_capacity == capacity() + 1) return; __shrink_or_extend(__target_capacity); }