]> git.ipfire.org Git - thirdparty/gcc.git/blame - libstdc++-v3/testsuite/ext/new_allocator/deallocate_local.cc
re PR testsuite/39696 (gcc.dg/tree-ssa/ssa-ccp-25.c scan-tree-dump doesn't work on...
[thirdparty/gcc.git] / libstdc++-v3 / testsuite / ext / new_allocator / deallocate_local.cc
CommitLineData
12cde21b 1//
b7e2f896 2// Copyright (C) 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
12cde21b
BK
3//
4// This file is part of the GNU ISO C++ Library. This library is free
5// software; you can redistribute it and/or modify it under the
6// terms of the GNU General Public License as published by the
7// Free Software Foundation; either version 2, or (at your option)
8// any later version.
9//
10// This library is distributed in the hope that it will be useful,
11// but WITHOUT ANY WARRANTY; without even the implied warranty of
12// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13// GNU General Public License for more details.
14//
15// You should have received a copy of the GNU General Public License along
16// with this library; see the file COPYING. If not, write to the Free
83f51799 17// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
12cde21b
BK
18// USA.
19
20// 20.4.1.1 allocator members
21
22#include <string>
a1340af7 23#include <stdexcept>
debac9f4 24#include <cstdlib>
b7e2f896 25#include <cstdio>
12cde21b 26#include <ext/new_allocator.h>
12cde21b 27
a1340af7
BK
28static size_t count;
29
30struct count_check
31{
32 count_check() { }
33 ~count_check()
34 {
35 if (count != 0)
36 throw std::runtime_error("allocation/deallocation count isn't zero");
37 }
38};
12cde21b 39
a1340af7
BK
40static count_check check;
41
12cde21b
BK
42void* operator new(size_t size) throw(std::bad_alloc)
43{
debac9f4
PC
44 std::printf("operator new is called \n");
45 void* p = std::malloc(size);
12cde21b
BK
46 if (p == NULL)
47 throw std::bad_alloc();
a1340af7 48 count++;
12cde21b
BK
49 return p;
50}
51
52void operator delete(void* p) throw()
53{
debac9f4 54 std::printf("operator delete is called \n");
12cde21b
BK
55 if (p == NULL)
56 return;
a1340af7 57 count--;
12cde21b
BK
58}
59
60typedef char char_t;
61typedef std::char_traits<char_t> traits_t;
62typedef __gnu_cxx::new_allocator<char_t> allocator_t;
63typedef std::basic_string<char_t, traits_t, allocator_t> string_t;
64
65int main()
66{
a1340af7
BK
67 string_t s;
68 s += "bayou bend";
12cde21b
BK
69 return 0;
70}