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