// Testcase for overflow handling in operator new[].
// Optimization of unnecessary overflow checks.
// In C++11 we throw bad_array_new_length instead.
// { dg-options -std=c++03 }
// { dg-do run }
// { dg-xfail-run-if "AIX operator new" { powerpc-ibm-aix* } }

#include <assert.h>
#include <stdlib.h>
#include <stdexcept>

static size_t magic_allocation_size
  = 1 + (size_t (1) << (sizeof (size_t) * 8 - 1));

struct exc : std::bad_alloc {
};

static size_t expected_size;

struct pod_with_new {
  char ch;
  void *operator new[] (size_t sz)
  {
    if (sz != expected_size)
      abort ();
    throw exc ();
  }
};

struct with_new {
  char ch;
  with_new () { }
  ~with_new () { }
  void *operator new[] (size_t sz)
  {
    if (sz != size_t (-1))
      abort ();
    throw exc ();
  }
};

struct non_pod {
  char ch;
  non_pod () { }
  ~non_pod () { }
};

void *
operator new (size_t sz) _GLIBCXX_THROW (std::bad_alloc)
{
  if (sz != expected_size)
    abort ();
  throw exc ();
}

int
main ()
{
  if (sizeof (pod_with_new) == 1)
    expected_size = magic_allocation_size;
  else
    expected_size = -1;

  try {
    new pod_with_new[magic_allocation_size];
    abort ();
  } catch (exc &) {
  }

  if (sizeof (with_new) == 1)
    expected_size = magic_allocation_size;
  else
    expected_size = -1;

  try {
    new with_new[magic_allocation_size];
    abort ();
  } catch (exc &) {
  }

  expected_size = magic_allocation_size;
  try {
    new char[magic_allocation_size];
    abort ();
  } catch (exc &) {
  }

  expected_size = -1;

  try {
    new pod_with_new[magic_allocation_size][2];
    abort ();
  } catch (exc &) {
  }

  try {
    new with_new[magic_allocation_size][2];
    abort ();
  } catch (exc &) {
  }

  try {
    new char[magic_allocation_size][2];
    abort ();
  } catch (exc &) {
  }

  try {
    new non_pod[magic_allocation_size];
    abort ();
  } catch (exc &) {
  }

  return 0;
}
