Fixes PR17148

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@193772 91177308-0d34-0410-b5e6-96231b3b80d8
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()