1 // RUN: %clang_cc1 -fsyntax-only -verify %s 2 // RUN: %clang_cc1 -fsyntax-only -verify -std=c++98 %s 3 // RUN: %clang_cc1 -fsyntax-only -verify -std=c++11 %s 4 5 void f(int i); 6 void f(int i = 0); // expected-note {{previous definition is here}} 7 void f(int i = 17); // expected-error {{redefinition of default argument}} 8 9 10 void g(int i, int j, int k = 3); 11 void g(int i, int j = 2, int k); 12 void g(int i = 1, int j, int k); 13 14 void h(int i, int j = 2, int k = 3, 15 int l, // expected-error {{missing default argument on parameter 'l'}} 16 int, // expected-error {{missing default argument on parameter}} 17 int n);// expected-error {{missing default argument on parameter 'n'}} 18 19 struct S { } s; 20 void i(int = s) { } // expected-error {{no viable conversion}} \ 21 // expected-note{{passing argument to parameter here}} 22 23 struct X { 24 X(int); 25 }; 26 27 void j(X x = 17); // expected-note{{'::j' declared here}} 28 29 struct Y { // expected-note 2{{candidate constructor (the implicit copy constructor) not viable}} 30 #if __cplusplus >= 201103L // C++11 or later 31 // expected-note@-2 2 {{candidate constructor (the implicit move constructor) not viable}} 32 #endif 33 34 explicit Y(int); 35 }; 36 37 void k(Y y = 17); // expected-error{{no viable conversion}} \ 38 // expected-note{{passing argument to parameter 'y' here}} 39 40 void kk(Y = 17); // expected-error{{no viable conversion}} \ 41 // expected-note{{passing argument to parameter here}} 42 43 int l () { 44 int m(int i, int j, int k = 3); 45 if (1) 46 { 47 int m(int i, int j = 2, int k = 4); 48 m(8); 49 } 50 return 0; 51 } 52 53 int i () { 54 void j (int f = 4); 55 { 56 void j (int f); 57 j(); // expected-error{{too few arguments to function call, expected 1, have 0; did you mean '::j'?}} 58 } 59 void jj (int f = 4); 60 { 61 void jj (int f); // expected-note{{'jj' declared here}} 62 jj(); // expected-error{{too few arguments to function call, single argument 'f' was not specified}} 63 } 64 } 65 66 int i2() { 67 void j(int f = 4); // expected-note{{'j' declared here}} 68 { 69 j(2, 3); // expected-error{{too many arguments to function call, expected at most single argument 'f', have 2}} 70 } 71 } 72 73 int pr20055_f(int x = 0, int y = UNDEFINED); // expected-error{{use of undeclared identifier}} 74 int pr20055_v = pr20055_f(0); 75 76 void PR20769() { void PR20769(int = 1); } 77 void PR20769(int = 2); 78 79 void PR20769_b(int = 1); 80 void PR20769_b() { void PR20769_b(int = 2); } 81