1 //===----------------------------------------------------------------------===//
3 // The LLVM Compiler Infrastructure
5 // This file is dual licensed under the MIT and the University of Illinois Open
6 // Source Licenses. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 // test sized operator delete replacement.
12 // Note that sized delete operator definitions below are simply ignored
13 // when sized deallocation is not supported, e.g., prior to C++14.
15 // UNSUPPORTED: sanitizer-new-delete
17 // NOTE: Only clang-3.7 and GCC 5.1 and greater support -fsized-deallocation.
18 // REQUIRES: fsized-deallocation
20 // RUN: %build -fsized-deallocation -O3
23 #if !defined(__cpp_sized_deallocation)
24 # error __cpp_sized_deallocation should be defined
27 #if !(__cpp_sized_deallocation >= 201309L)
28 # error expected __cpp_sized_deallocation >= 201309L
36 #include "test_macros.h"
38 int unsized_delete_called = 0;
39 int unsized_delete_nothrow_called = 0;
40 int sized_delete_called = 0;
42 void operator delete(void* p) TEST_NOEXCEPT
44 ++unsized_delete_called;
48 void operator delete(void* p, const std::nothrow_t&) TEST_NOEXCEPT
50 ++unsized_delete_nothrow_called;
54 void operator delete(void* p, std::size_t) TEST_NOEXCEPT
56 ++sized_delete_called;
65 assert(0 == sized_delete_called);
66 assert(0 == unsized_delete_called);
67 assert(0 == unsized_delete_nothrow_called);
70 assert(1 == sized_delete_called);
71 assert(0 == unsized_delete_called);
72 assert(0 == unsized_delete_nothrow_called);