new_replace.pass.cpp revision f5256e16dfc425c1d466f6308d4026d529ce9e0b
1//===----------------------------------------------------------------------===//
2//
3//                     The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9
10 // test operator new replacement
11
12#include <new>
13#include <cstddef>
14#include <cstdlib>
15#include <cassert>
16#include <limits>
17
18int new_called = 0;
19
20void* operator new(std::size_t s) throw(std::bad_alloc)
21{
22    ++new_called;
23    return std::malloc(s);
24}
25
26void  operator delete(void* p) throw()
27{
28    --new_called;
29    std::free(p);
30}
31
32bool A_constructed = false;
33
34struct A
35{
36    A() {A_constructed = true;}
37    ~A() {A_constructed = false;}
38};
39
40int main()
41{
42    A* ap = new A;
43    assert(ap);
44    assert(A_constructed);
45    assert(new_called);
46    delete ap;
47    assert(!A_constructed);
48    assert(!new_called);
49}
50