function-redecl.c revision d6f7e9dccd0fa8a5a15d7478324c0ae229fc5e1e
1// RUN: clang -fsyntax-only -verify %s 2 3// PR3588 4void g0(int, int); 5void g0(); // expected-note{{previous declaration is here}} 6 7void f0() { 8 g0(1, 2, 3); // expected-error{{too many arguments to function call}} 9} 10 11void g0(int); // expected-error{{conflicting types for 'g0'}} 12 13int g1(int, int); 14 15typedef int INT; 16 17INT g1(x, y) 18 int x; 19 int y; 20{ 21 return x + y; 22} 23 24int g2(int, int); // expected-note{{previous declaration is here}} 25 26INT g2(x) // expected-error{{conflicting types for 'g2'}} 27 int x; 28{ 29 return x; 30} 31 32void test() { 33 int f1; 34 { 35 void f1(double); 36 { 37 void f1(double); // expected-note{{previous declaration is here}} 38 { 39 int f1(int); // expected-error{{conflicting types for 'f1'}} 40 } 41 } 42 } 43} 44 45extern void g3(int); // expected-note{{previous declaration is here}} 46static void g3(int x) { } // expected-error{{static declaration of 'g3' follows non-static declaration}} 47 48void test2() { 49 extern int f2; // expected-note 2 {{previous definition is here}} 50 { 51 void f2(int); // expected-error{{redefinition of 'f2' as different kind of symbol}} 52 } 53 54 { 55 int f2; 56 { 57 void f2(int); // expected-error{{redefinition of 'f2' as different kind of symbol}} 58 } 59 } 60} 61 62// <rdar://problem/6127293> 63int outer1(int); // expected-note{{previous declaration is here}} 64struct outer3 { }; 65int outer4(int); 66int outer5; // expected-note{{previous definition is here}} 67int *outer7(int); 68 69void outer_test() { 70 int outer1(float); // expected-error{{conflicting types for 'outer1'}} 71 int outer2(int); // expected-note{{previous declaration is here}} 72 int outer3(int); // expected-note{{previous declaration is here}} 73 int outer4(int); // expected-note{{previous declaration is here}} 74 int outer5(int); // expected-error{{redefinition of 'outer5' as different kind of symbol}} 75 int* outer6(int); // expected-note{{previous declaration is here}} 76 int *outer7(int); 77 78 int *ip7 = outer7(6); 79} 80 81int outer2(float); // expected-error{{conflicting types for 'outer2'}} 82int outer3(float); // expected-error{{conflicting types for 'outer3'}} 83int outer4(float); // expected-error{{conflicting types for 'outer4'}} 84 85void outer_test2(int x) { 86 int* ip = outer6(x); // expected-warning{{use of out-of-scope declaration of 'outer6'}} 87 int *ip2 = outer7(x); 88} 89