diff options
| -rw-r--r-- | libcxx/include/string | 4 | ||||
| -rw-r--r-- | libcxx/test/strings/basic.string/string.capacity/max_size.pass.cpp | 6 |
2 files changed, 8 insertions, 2 deletions
diff --git a/libcxx/include/string b/libcxx/include/string index c98e22f01c8..234eb6ba860 100644 --- a/libcxx/include/string +++ b/libcxx/include/string @@ -3047,9 +3047,9 @@ basic_string<_CharT, _Traits, _Allocator>::max_size() const _NOEXCEPT { size_type __m = __alloc_traits::max_size(__alloc()); #if _LIBCPP_BIG_ENDIAN - return (__m <= ~__long_mask ? __m : __m/2) - 1; + return (__m <= ~__long_mask ? __m : __m/2) - __alignment; #else - return __m - 1; + return __m - __alignment; #endif } diff --git a/libcxx/test/strings/basic.string/string.capacity/max_size.pass.cpp b/libcxx/test/strings/basic.string/string.capacity/max_size.pass.cpp index e016bba56f6..f9b228412c7 100644 --- a/libcxx/test/strings/basic.string/string.capacity/max_size.pass.cpp +++ b/libcxx/test/strings/basic.string/string.capacity/max_size.pass.cpp @@ -21,6 +21,12 @@ void test(const S& s) { assert(s.max_size() >= s.size()); + { + S s2; + try { s2.resize(s2.max_size() - 1, 'x'); } + catch ( const std::bad_alloc & ) { return ; } + assert ( false ); + } } int main() |

