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