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