1 // RUN: clang -fsyntax-only -verify %s 2 void f(int i, int j, int k = 3); 3 void f(int i, int j, int k); 4 void f(int i, int j = 2, int k); 5 void f(int i, int j, int k); 6 void f(int i = 1, int j, int k); 7 void f(int i, int j, int k); 8 9 void i() 10 { 11 f(); 12 f(0); 13 f(0, 1); 14 f(0, 1, 2); 15 } 16 17 18 int f1(int i, int i, int j) { // expected-error {{redefinition of parameter 'i'}} 19 i = 17; 20 return j; 21 } 22 23 int x; 24 void g(int x, int y = x); // expected-error {{default argument references parameter 'x'}} 25 26 void h() 27 { 28 int i; 29 extern void h2(int x = sizeof(i)); // expected-error {{default argument references local variable 'i' of enclosing function}} 30 } 31 32 void g2(int x, int y, int z = x + y); // expected-error {{default argument references parameter 'x'}} expected-error {{default argument references parameter 'y'}} 33 34 void nondecl(int (*f)(int x = 5)) // {expected-error {{default arguments can only be specified}}} 35 { 36 void (*f2)(int = 17) // {expected-error {{default arguments can only be specified}}} 37 = (void (*)(int = 42))f; // {expected-error {{default arguments can only be specified}}} 38 } 39 40 class X { 41 void f(X* x = this); // expected-error{{invalid use of 'this' outside of a nonstatic member function}} 42 43 void g() { 44 int f(X* x = this); // expected-error{{default argument references 'this'}} 45 } 46 }; 47