blob: 4846b0a496bbb1d58d38f8f37098279ff2cb777e [file] [log] [blame]
//===----------------------------------------------------------------------===//
//
// The LLVM Compiler Infrastructure
//
// This file is dual licensed under the MIT and the University of Illinois Open
// Source Licenses. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
// <memory>
// allocator:
// pointer allocate(size_type n, allocator<void>::const_pointer hint=0);
#include <memory>
#include <cassert>
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);
}
int main()
{
{ // Bug 26812 -- allocating too large
typedef double T;
std::allocator<T> a;
test_max<T> (a.max_size() + 1); // just barely too large
test_max<T> (a.max_size() * 2); // significantly too large
test_max<T> (((size_t) -1) / sizeof(T) + 1); // multiply will overflow
test_max<T> ((size_t) -1); // way too large
}
{
typedef const double T;
std::allocator<T> a;
test_max<T> (a.max_size() + 1); // just barely too large
test_max<T> (a.max_size() * 2); // significantly too large
test_max<T> (((size_t) -1) / sizeof(T) + 1); // multiply will overflow
test_max<T> ((size_t) -1); // way too large
}
}