Fixes PR17148
llvm-svn: 193772
Cr-Mirrored-From: sso://chromium.googlesource.com/_direct/external/github.com/llvm/llvm-project
Cr-Mirrored-Commit: f5fa53882fe3d463821a8c0932666fa1dcb6faa2
diff --git a/include/string b/include/string
index c98e22f..234eb6b 100644
--- a/include/string
+++ b/include/string
@@ -3047,9 +3047,9 @@
{
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/test/strings/basic.string/string.capacity/max_size.pass.cpp b/test/strings/basic.string/string.capacity/max_size.pass.cpp
index e016bba..f9b2284 100644
--- a/test/strings/basic.string/string.capacity/max_size.pass.cpp
+++ b/test/strings/basic.string/string.capacity/max_size.pass.cpp
@@ -21,6 +21,12 @@
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()