blob: dbd642d6ba5842c5d0af4d213f23a915d826927e [file]
// { dg-do run }
#include <new>
#include <stdint.h>
#include <testsuite_hooks.h>
#pragma GCC diagnostic ignored "-Walloc-size-larger-than="
void
check_aligned_new_overflow(std::size_t size, std::size_t align)
{
#if __cpp_aligned_new
std::align_val_t alignv = (std::align_val_t)align;
try
{
(void) ::operator new(size, alignv);
VERIFY(false);
}
catch (const std::bad_alloc&)
{
}
void* p = ::operator new(size, alignv, std::nothrow);
VERIFY(p == 0);
#endif
}
int main()
{
check_aligned_new_overflow(-9, 32);
check_aligned_new_overflow(SIZE_MAX, 8);
check_aligned_new_overflow(SIZE_MAX, 32);
check_aligned_new_overflow(SIZE_MAX, 1024);
check_aligned_new_overflow(SIZE_MAX, 65536);
check_aligned_new_overflow(SIZE_MAX - 1, 16);
check_aligned_new_overflow(SIZE_MAX - 1025, 1024);
check_aligned_new_overflow(SIZE_MAX - 1024, 1024);
check_aligned_new_overflow(SIZE_MAX - 65536, 65536);
}