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 // UNSUPPORTED: sanitizer-new-delete, c++98, c++03, c++11
14 // NOTE: Clang does not enable sized-deallocation in C++14 and beyond by
15 // default. It is only enabled when -fsized-deallocation is given.
16 // (except clang-3.6 which temporarily enabled sized-deallocation)
17 // UNSUPPORTED: clang, apple-clang
19 // NOTE: GCC 4.9.1 does not support sized-deallocation in C++14. However
21 // XFAIL: gcc-4.7, gcc-4.8, gcc-4.9
28 #include "test_macros.h"
30 int unsized_delete_called = 0;
31 int unsized_delete_nothrow_called = 0;
32 int sized_delete_called = 0;
34 void operator delete(void* p) TEST_NOEXCEPT
36 ++unsized_delete_called;
40 void operator delete(void* p, const std::nothrow_t&) TEST_NOEXCEPT
42 ++unsized_delete_nothrow_called;
46 void operator delete(void* p, std::size_t) TEST_NOEXCEPT
48 ++sized_delete_called;
56 assert(0 == unsized_delete_called);
57 assert(0 == unsized_delete_nothrow_called);
58 assert(0 == sized_delete_called);
62 assert(0 == unsized_delete_called);
63 assert(1 == sized_delete_called);
64 assert(0 == unsized_delete_nothrow_called);