1*89a1d03eSRichard // RUN: %check_clang_tidy %s misc-new-delete-overloads %t -- -- -fsized-deallocation
2*89a1d03eSRichard 
3*89a1d03eSRichard typedef decltype(sizeof(int)) size_t;
4*89a1d03eSRichard 
5*89a1d03eSRichard struct S {
6*89a1d03eSRichard   // CHECK-MESSAGES: :[[@LINE+1]]:8: warning: declaration of 'operator delete' has no matching declaration of 'operator new' at the same scope [misc-new-delete-overloads]
7*89a1d03eSRichard   void operator delete(void *ptr, size_t) noexcept; // not a placement delete
8*89a1d03eSRichard };
9*89a1d03eSRichard 
10*89a1d03eSRichard struct T {
11*89a1d03eSRichard   // Because we have enabled sized deallocations explicitly, this new/delete
12*89a1d03eSRichard   // pair matches.
13*89a1d03eSRichard   void *operator new(size_t size) noexcept;
14*89a1d03eSRichard   void operator delete(void *ptr, size_t) noexcept; // ok because sized deallocation is enabled
15*89a1d03eSRichard };
16*89a1d03eSRichard 
17*89a1d03eSRichard // While we're here, check that global operator delete with no operator new
18*89a1d03eSRichard // is also matched.
19*89a1d03eSRichard // CHECK-MESSAGES: :[[@LINE+1]]:6: warning: declaration of 'operator delete' has no matching declaration of 'operator new' at the same scope
20*89a1d03eSRichard void operator delete(void *ptr) noexcept;
21