1*89a1d03eSRichard // RUN: %check_clang_tidy -std=c++17-or-later %s modernize-use-uncaught-exceptions %t
2*89a1d03eSRichard
3*89a1d03eSRichard #define MACRO std::uncaught_exception
4*89a1d03eSRichard // CHECK-FIXES: #define MACRO std::uncaught_exception
5*89a1d03eSRichard
uncaught_exception()6*89a1d03eSRichard bool uncaught_exception() {
7*89a1d03eSRichard return 0;
8*89a1d03eSRichard }
9*89a1d03eSRichard
10*89a1d03eSRichard namespace std {
uncaught_exception()11*89a1d03eSRichard bool uncaught_exception() {
12*89a1d03eSRichard return false;
13*89a1d03eSRichard }
14*89a1d03eSRichard
uncaught_exceptions()15*89a1d03eSRichard int uncaught_exceptions() {
16*89a1d03eSRichard return 0;
17*89a1d03eSRichard }
18*89a1d03eSRichard }
19*89a1d03eSRichard
20*89a1d03eSRichard template <typename T>
doSomething(T t)21*89a1d03eSRichard bool doSomething(T t) {
22*89a1d03eSRichard return t();
23*89a1d03eSRichard // CHECK-FIXES: return t();
24*89a1d03eSRichard }
25*89a1d03eSRichard
26*89a1d03eSRichard template <bool (*T)()>
doSomething2()27*89a1d03eSRichard bool doSomething2() {
28*89a1d03eSRichard return T();
29*89a1d03eSRichard // CHECK-MESSAGES: [[@LINE-1]]:10: warning: 'std::uncaught_exception' is deprecated, use 'std::uncaught_exceptions' instead
30*89a1d03eSRichard // CHECK-FIXES: return T();
31*89a1d03eSRichard }
32*89a1d03eSRichard
no_warn()33*89a1d03eSRichard void no_warn() {
34*89a1d03eSRichard
35*89a1d03eSRichard uncaught_exception();
36*89a1d03eSRichard // CHECK-FIXES: uncaught_exception();
37*89a1d03eSRichard
38*89a1d03eSRichard doSomething(uncaught_exception);
39*89a1d03eSRichard // CHECK-FIXES: doSomething(uncaught_exception);
40*89a1d03eSRichard }
41*89a1d03eSRichard
warn()42*89a1d03eSRichard void warn() {
43*89a1d03eSRichard
44*89a1d03eSRichard std::uncaught_exception();
45*89a1d03eSRichard // CHECK-MESSAGES: [[@LINE-1]]:3: warning: 'std::uncaught_exception' is deprecated, use 'std::uncaught_exceptions' instead
46*89a1d03eSRichard // CHECK-FIXES: std::uncaught_exceptions();
47*89a1d03eSRichard
48*89a1d03eSRichard using std::uncaught_exception;
49*89a1d03eSRichard // CHECK-MESSAGES: [[@LINE-1]]:14: warning: 'std::uncaught_exception' is deprecated, use 'std::uncaught_exceptions' instead
50*89a1d03eSRichard // CHECK-FIXES: using std::uncaught_exceptions;
51*89a1d03eSRichard
52*89a1d03eSRichard uncaught_exception();
53*89a1d03eSRichard // CHECK-MESSAGES: [[@LINE-1]]:3: warning: 'std::uncaught_exception' is deprecated, use 'std::uncaught_exceptions' instead
54*89a1d03eSRichard // CHECK-FIXES: uncaught_exceptions();
55*89a1d03eSRichard
56*89a1d03eSRichard bool b{uncaught_exception()};
57*89a1d03eSRichard // CHECK-MESSAGES: [[@LINE-1]]:10: warning: 'std::uncaught_exception' is deprecated, use 'std::uncaught_exceptions' instead
58*89a1d03eSRichard // CHECK-FIXES: bool b{std::uncaught_exceptions() > 0};
59*89a1d03eSRichard
60*89a1d03eSRichard MACRO();
61*89a1d03eSRichard // CHECK-MESSAGES: [[@LINE-1]]:3: warning: 'std::uncaught_exception' is deprecated, use 'std::uncaught_exceptions' instead
62*89a1d03eSRichard // CHECK-FIXES: MACRO();
63*89a1d03eSRichard
64*89a1d03eSRichard doSomething(std::uncaught_exception);
65*89a1d03eSRichard // CHECK-MESSAGES: [[@LINE-1]]:15: warning: 'std::uncaught_exception' is deprecated, use 'std::uncaught_exceptions' instead
66*89a1d03eSRichard // CHECK-FIXES: doSomething(std::uncaught_exception);
67*89a1d03eSRichard
68*89a1d03eSRichard doSomething(uncaught_exception);
69*89a1d03eSRichard // CHECK-MESSAGES: [[@LINE-1]]:15: warning: 'std::uncaught_exception' is deprecated, use 'std::uncaught_exceptions' instead
70*89a1d03eSRichard // CHECK-FIXES: doSomething(uncaught_exception);
71*89a1d03eSRichard
72*89a1d03eSRichard bool (*foo)();
73*89a1d03eSRichard foo = &uncaught_exception;
74*89a1d03eSRichard // CHECK-MESSAGES: [[@LINE-1]]:10: warning: 'std::uncaught_exception' is deprecated, use 'std::uncaught_exceptions' instead
75*89a1d03eSRichard // CHECK-FIXES: foo = &uncaught_exception;
76*89a1d03eSRichard
77*89a1d03eSRichard doSomething2<uncaught_exception>();
78*89a1d03eSRichard // CHECK-MESSAGES: [[@LINE-1]]:16: warning: 'std::uncaught_exception' is deprecated, use 'std::uncaught_exceptions' instead
79*89a1d03eSRichard // CHECK-FIXES: doSomething2<uncaught_exception>();
80*89a1d03eSRichard }
81