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 23 int delete_called = 0; 24 int delete_nothrow_called = 0; 25 26 void operator delete(void* p) TEST_NOEXCEPT 27 { 28 ++delete_called; 29 std::free(p); 30 } 31 32 void operator delete(void* p, const std::nothrow_t&) TEST_NOEXCEPT 33 { 34 ++delete_nothrow_called; 35 std::free(p); 36 } 37 38 int* volatile x; 39 40 int 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