Change allocator<T>::allocate to throw length_error, not bad_alloc
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@268842 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/include/memory b/include/memory
index 7888303..8378aef 100644
--- a/include/memory
+++ b/include/memory
@@ -607,6 +607,7 @@
#include <__functional_base>
#include <iosfwd>
#include <tuple>
+#include <stdexcept>
#include <cstring>
#if defined(_LIBCPP_NO_EXCEPTIONS)
#include <cassert>
@@ -1728,11 +1729,8 @@
_LIBCPP_INLINE_VISIBILITY pointer allocate(size_type __n, allocator<void>::const_pointer = 0)
{
if (__n > max_size())
-#ifndef _LIBCPP_NO_EXCEPTIONS
- throw bad_alloc();
-#else
- assert(!"allocator<T>::allocate::bad_alloc");
-#endif
+ __libcpp_throw(length_error("allocator<T>::allocate(size_t n)"
+ " 'n' exceeds maximum supported size"));
return static_cast<pointer>(_VSTD::__allocate(__n * sizeof(_Tp)));
}
_LIBCPP_INLINE_VISIBILITY void deallocate(pointer __p, size_type) _NOEXCEPT
@@ -1827,13 +1825,10 @@
_LIBCPP_INLINE_VISIBILITY pointer allocate(size_type __n, allocator<void>::const_pointer = 0)
{
if (__n > max_size())
-#ifndef _LIBCPP_NO_EXCEPTIONS
- throw bad_alloc();
-#else
- assert(!"allocator<const T>::allocate::bad_alloc");
-#endif
+ __libcpp_throw(length_error("allocator<const T>::allocate(size_t n)"
+ " 'n' exceeds maximum supported size"));
return static_cast<pointer>(_VSTD::__allocate(__n * sizeof(_Tp)));
- }
+ }
_LIBCPP_INLINE_VISIBILITY void deallocate(pointer __p, size_type) _NOEXCEPT
{_VSTD::__deallocate((void*)__p);}
_LIBCPP_INLINE_VISIBILITY size_type max_size() const _NOEXCEPT
diff --git a/test/std/utilities/memory/default.allocator/allocator.members/allocate.size.pass.cpp b/test/std/utilities/memory/default.allocator/allocator.members/allocate.size.pass.cpp
index f50fbe7..dc0bdd0 100644
--- a/test/std/utilities/memory/default.allocator/allocator.members/allocate.size.pass.cpp
+++ b/test/std/utilities/memory/default.allocator/allocator.members/allocate.size.pass.cpp
@@ -20,9 +20,11 @@
void test_max(size_t count)
{
std::allocator<T> a;
- try { a.allocate( count ); }
- catch ( const std::bad_alloc &) { return ; }
- assert (false);
+ try {
+ a.allocate(count);
+ assert(false);
+ } catch (const std::exception &) {
+ }
}
int main()