Change allocator<T>::allocate to throw length_error, not bad_alloc

llvm-svn: 268842
This commit is contained in:
Eric Fiselier 2016-05-07 03:12:24 +00:00
parent 522a7f9535
commit 4524d6e739
2 changed files with 11 additions and 14 deletions

View File

@ -607,6 +607,7 @@ void* align(size_t alignment, size_t size, void*& ptr, size_t& space);
#include <__functional_base>
#include <iosfwd>
#include <tuple>
#include <stdexcept>
#include <cstring>
#if defined(_LIBCPP_NO_EXCEPTIONS)
#include <cassert>
@ -1728,11 +1729,8 @@ public:
_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 @@ public:
_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

View File

@ -20,9 +20,11 @@ template <typename T>
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()