1//===----------------------------------------------------------------------===// 2// 3// The LLVM Compiler Infrastructure 4// 5// This file is dual licensed under the MIT and the University of Illinois Open 6// Source Licenses. See LICENSE.TXT for details. 7// 8//===----------------------------------------------------------------------===// 9 10// test sized operator delete calls the unsized operator delete. 11// When sized operator delete is not available (ex C++11) then the unsized 12// operator delete is called directly. 13 14// UNSUPPORTED: sanitizer-new-delete 15 16#include <new> 17#include <cstddef> 18#include <cstdlib> 19#include <cassert> 20 21#include "test_macros.h" 22 23int delete_called = 0; 24int delete_nothrow_called = 0; 25 26void operator delete(void* p) TEST_NOEXCEPT 27{ 28 ++delete_called; 29 std::free(p); 30} 31 32void operator delete(void* p, const std::nothrow_t&) TEST_NOEXCEPT 33{ 34 ++delete_nothrow_called; 35 std::free(p); 36} 37 38int* volatile x; 39 40int main() 41{ 42 x = new int(42); 43 assert(0 == delete_called); 44 assert(0 == delete_nothrow_called); 45 46 delete x; 47 assert(1 == delete_called); 48 assert(0 == delete_nothrow_called); 49} 50