X-Git-Url: https://oss.titaniummirror.com/gitweb?a=blobdiff_plain;f=libstdc%2B%2B-v3%2Ftestsuite%2F23_containers%2Fvector%2Fzero_sized_allocations.cc;fp=libstdc%2B%2B-v3%2Ftestsuite%2F23_containers%2Fvector%2Fzero_sized_allocations.cc;h=7441cf89db69b97b12014cb2182239d94f9665c5;hb=6fed43773c9b0ce596dca5686f37ac3fc0fa11c0;hp=0000000000000000000000000000000000000000;hpb=27b11d56b743098deb193d510b337ba22dc52e5c;p=msp430-gcc.git diff --git a/libstdc++-v3/testsuite/23_containers/vector/zero_sized_allocations.cc b/libstdc++-v3/testsuite/23_containers/vector/zero_sized_allocations.cc new file mode 100644 index 00000000..7441cf89 --- /dev/null +++ b/libstdc++-v3/testsuite/23_containers/vector/zero_sized_allocations.cc @@ -0,0 +1,68 @@ +// Copyright (C) 2007, 2009 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// . +// + +#include +#include +#include + +unsigned int zero_sized_news = 0; + +void *operator new(size_t size) throw (std::bad_alloc) +{ + /* malloc(0) is unpredictable; avoid it. */ + if (size == 0) + { + size = 1; + ++zero_sized_news; + } + + void *p = std::malloc(size); + + if (p == 0) + throw std::bad_alloc(); + + return p; +} + +void operator delete(void *ptr) throw() +{ + if (ptr != 0) + std::free(ptr); +} + +// http://gcc.gnu.org/ml/libstdc++/2007-09/msg00006.html +void test01() +{ + bool test __attribute__((unused)) = true; + + std::vector > *v; + VERIFY( zero_sized_news == 0 ); + + v = new std::vector >; + VERIFY( zero_sized_news == 0 ); + + v->resize(10); + delete(v); + VERIFY( zero_sized_news == 0 ); +} + +int main() +{ + test01(); + return 0; +}