summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--libcxx/include/string4
-rw-r--r--libcxx/test/strings/basic.string/string.capacity/max_size.pass.cpp6
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()
OpenPOWER on IntegriCloud