| // RUN: %check_clang_tidy %s modernize-use-noexcept %t -- \ |
| // RUN: -config="{CheckOptions: [{key: modernize-use-noexcept.ReplacementString, value: 'NOEXCEPT'}]}" \ |
| // RUN: -- -std=c++11 -fexceptions |
| |
| // Example definition of NOEXCEPT -- simplified test to see if noexcept is supported. |
| #if (__has_feature(cxx_noexcept)) |
| #define NOEXCEPT noexcept |
| #else |
| #define NOEXCEPT throw() |
| #endif |
| |
| void bar() throw() {} |
| // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: dynamic exception specification 'throw()' is deprecated; consider using 'NOEXCEPT' instead [modernize-use-noexcept] |
| // CHECK-FIXES: void bar() NOEXCEPT {} |
| |
| // Should not trigger a FixItHint, since macros only support noexcept, and this |
| // case throws. |
| class A {}; |
| class B {}; |
| void foobar() throw(A, B); |
| // CHECK-MESSAGES: :[[@LINE-1]]:15: warning: dynamic exception specification 'throw(A, B)' is deprecated; consider removing it instead [modernize-use-noexcept] |
| |
| // Should not trigger a replacement. |
| void foo() noexcept(true); |
| |
| struct Z { |
| void operator delete(void *ptr) throw(); |
| void operator delete[](void *ptr) throw(int); |
| ~Z() throw(int) {} |
| }; |
| // CHECK-MESSAGES: :[[@LINE-4]]:35: warning: dynamic exception specification 'throw()' is deprecated; consider using 'NOEXCEPT' instead [modernize-use-noexcept] |
| // CHECK-MESSAGES: :[[@LINE-4]]:37: warning: dynamic exception specification 'throw(int)' is deprecated; consider removing it instead [modernize-use-noexcept] |
| // CHECK-MESSAGES: :[[@LINE-4]]:8: warning: dynamic exception specification 'throw(int)' is deprecated; consider removing it instead [modernize-use-noexcept] |
| // CHECK-FIXES: void operator delete(void *ptr) NOEXCEPT; |
| // CHECK-FIXES: void operator delete[](void *ptr) throw(int); |
| // CHECK-FIXES: ~Z() throw(int) {} |