1// Copyright (C) 2007-2015 Free Software Foundation, Inc.
2//
3// This file is part of the GNU ISO C++ Library.  This library is free
4// software; you can redistribute it and/or modify it under the
5// terms of the GNU General Public License as published by the
6// Free Software Foundation; either version 3, or (at your option)
7// any later version.
8//
9// This library is distributed in the hope that it will be useful,
10// but WITHOUT ANY WARRANTY; without even the implied warranty of
11// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12// GNU General Public License for more details.
13//
14// You should have received a copy of the GNU General Public License along
15// with this library; see the file COPYING3.  If not see
16// <http://www.gnu.org/licenses/>.
17//
18
19#include <vector>
20#include <cstdlib>
21#include <testsuite_hooks.h>
22
23unsigned int zero_sized_news = 0;
24
25void *operator new(size_t size) throw (std::bad_alloc)
26{
27  /* malloc(0) is unpredictable; avoid it.  */
28  if (size == 0)
29    {
30      size = 1;
31      ++zero_sized_news;
32    }
33
34  void *p = std::malloc(size);
35
36  if (p == 0)
37    throw std::bad_alloc();
38
39  return p;
40}
41
42void operator delete(void *ptr) throw()
43{
44  if (ptr != 0)
45    std::free(ptr);
46}
47
48// http://gcc.gnu.org/ml/libstdc++/2007-09/msg00006.html
49void test01()
50{
51  bool test __attribute__((unused)) = true;
52
53  std::vector<std::vector<int> > *v;
54  VERIFY( zero_sized_news == 0 );
55
56  v = new std::vector<std::vector<int> >;
57  VERIFY( zero_sized_news == 0 );
58
59  v->resize(10);
60  delete(v);
61  VERIFY( zero_sized_news == 0 );
62}
63
64int main()
65{
66  test01();
67  return 0;
68}
69