1 //===----------------------------------------------------------------------===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 
9 // test sized operator delete calls the unsized operator delete.
10 // When sized operator delete is not available (ex C++11) then the unsized
11 // operator delete is called directly.
12 
13 // UNSUPPORTED: sanitizer-new-delete
14 
15 #include <new>
16 #include <cstddef>
17 #include <cstdlib>
18 #include <cassert>
19 
20 #include "test_macros.h"
21 
22 int delete_called = 0;
23 int delete_nothrow_called = 0;
24 
25 void operator delete(void* p) TEST_NOEXCEPT
26 {
27     ++delete_called;
28     std::free(p);
29 }
30 
31 void operator delete(void* p, const std::nothrow_t&) TEST_NOEXCEPT
32 {
33     ++delete_nothrow_called;
34     std::free(p);
35 }
36 
37 int main(int, char**)
38 {
39     int *x = new int(42);
40     DoNotOptimize(x);
41     assert(0 == delete_called);
42     assert(0 == delete_nothrow_called);
43 
44     delete x;
45     DoNotOptimize(x);
46     assert(1 == delete_called);
47     assert(0 == delete_nothrow_called);
48 
49   return 0;
50 }
51