1*89a1d03eSRichard // RUN: %check_clang_tidy %s fuchsia-default-arguments-declarations %t
2*89a1d03eSRichard 
foo(int value=5)3*89a1d03eSRichard int foo(int value = 5) { return value; }
4*89a1d03eSRichard // CHECK-NOTES: [[@LINE-1]]:9: warning: declaring a parameter with a default argument is disallowed [fuchsia-default-arguments-declarations]
5*89a1d03eSRichard // CHECK-FIXES: int foo(int value) { return value; }
6*89a1d03eSRichard 
bar(int value)7*89a1d03eSRichard int bar(int value) { return value; }
8*89a1d03eSRichard 
9*89a1d03eSRichard class Baz {
10*89a1d03eSRichard public:
a(int value=5)11*89a1d03eSRichard   int a(int value = 5) { return value; }
12*89a1d03eSRichard   // CHECK-NOTES: [[@LINE-1]]:9: warning: declaring a parameter with a default argument is disallowed [fuchsia-default-arguments-declarations]
13*89a1d03eSRichard   // CHECK-FIXES: int a(int value) { return value; }
14*89a1d03eSRichard 
b(int value)15*89a1d03eSRichard   int b(int value) { return value; }
16*89a1d03eSRichard };
17*89a1d03eSRichard 
18*89a1d03eSRichard class Foo {
19*89a1d03eSRichard   // Fix should be suggested in declaration
20*89a1d03eSRichard   int a(int value = 53);
21*89a1d03eSRichard   // CHECK-NOTES: [[@LINE-1]]:9: warning: declaring a parameter with a default argument is disallowed [fuchsia-default-arguments-declarations]
22*89a1d03eSRichard   // CHECK-FIXES: int a(int value);
23*89a1d03eSRichard };
24*89a1d03eSRichard 
25*89a1d03eSRichard // Fix shouldn't be suggested in implementation
a(int value)26*89a1d03eSRichard int Foo::a(int value) {
27*89a1d03eSRichard   return value;
28*89a1d03eSRichard }
29*89a1d03eSRichard 
30*89a1d03eSRichard // Elided functions
f(int=5)31*89a1d03eSRichard void f(int = 5) {};
32*89a1d03eSRichard // CHECK-NOTES: [[@LINE-1]]:8: warning: declaring a parameter with a default argument is disallowed [fuchsia-default-arguments-declarations]
33*89a1d03eSRichard // CHECK-FIXES: void f(int) {};
34*89a1d03eSRichard 
g(int)35*89a1d03eSRichard void g(int) {};
36*89a1d03eSRichard 
37*89a1d03eSRichard // Should not suggest fix for macro-defined parameters
38*89a1d03eSRichard #define D(val) = val
39*89a1d03eSRichard 
40*89a1d03eSRichard void h(int i D(5));
41*89a1d03eSRichard // CHECK-NOTES: [[@LINE-1]]:8: warning: declaring a parameter with a default argument is disallowed [fuchsia-default-arguments-declarations]
42*89a1d03eSRichard // CHECK-FIXES-NOT: void h(int i);
43*89a1d03eSRichard 
44*89a1d03eSRichard void x(int i);
45*89a1d03eSRichard void x(int i = 12);
46*89a1d03eSRichard // CHECK-NOTES: [[@LINE-1]]:8: warning: declaring a parameter with a default argument is disallowed [fuchsia-default-arguments-declarations]
47*89a1d03eSRichard // CHECK-FIXES: void x(int i);
48*89a1d03eSRichard 
x(int i)49*89a1d03eSRichard void x(int i) {}
50*89a1d03eSRichard 
51*89a1d03eSRichard struct S {
52*89a1d03eSRichard   void x(int i);
53*89a1d03eSRichard };
54*89a1d03eSRichard 
x(int i=12)55*89a1d03eSRichard void S::x(int i = 12) {}
56*89a1d03eSRichard // CHECK-NOTES: [[@LINE-1]]:11: warning: declaring a parameter with a default argument is disallowed [fuchsia-default-arguments-declarations]
57*89a1d03eSRichard // CHECK-FIXES: void S::x(int i) {}
58