function-redecl.c revision 04495c859f81e440748a9b86baa2913461652bb0
16871981fbccba9e8a63997d58245ec0add114f49Douglas Gregor// RUN: clang -fsyntax-only -verify %s 26871981fbccba9e8a63997d58245ec0add114f49Douglas Gregor 36871981fbccba9e8a63997d58245ec0add114f49Douglas Gregor// PR3588 46871981fbccba9e8a63997d58245ec0add114f49Douglas Gregorvoid g0(int, int); 56871981fbccba9e8a63997d58245ec0add114f49Douglas Gregorvoid g0(); // expected-note{{previous declaration is here}} 66871981fbccba9e8a63997d58245ec0add114f49Douglas Gregor 76871981fbccba9e8a63997d58245ec0add114f49Douglas Gregorvoid f0() { 86871981fbccba9e8a63997d58245ec0add114f49Douglas Gregor g0(1, 2, 3); // expected-error{{too many arguments to function call}} 96871981fbccba9e8a63997d58245ec0add114f49Douglas Gregor} 106871981fbccba9e8a63997d58245ec0add114f49Douglas Gregor 116871981fbccba9e8a63997d58245ec0add114f49Douglas Gregorvoid g0(int); // expected-error{{conflicting types for 'g0'}} 126871981fbccba9e8a63997d58245ec0add114f49Douglas Gregor 136871981fbccba9e8a63997d58245ec0add114f49Douglas Gregorint g1(int, int); 146871981fbccba9e8a63997d58245ec0add114f49Douglas Gregor 156871981fbccba9e8a63997d58245ec0add114f49Douglas Gregortypedef int INT; 166871981fbccba9e8a63997d58245ec0add114f49Douglas Gregor 176871981fbccba9e8a63997d58245ec0add114f49Douglas GregorINT g1(x, y) 186871981fbccba9e8a63997d58245ec0add114f49Douglas Gregor int x; 196871981fbccba9e8a63997d58245ec0add114f49Douglas Gregor int y; 206871981fbccba9e8a63997d58245ec0add114f49Douglas Gregor{ 216871981fbccba9e8a63997d58245ec0add114f49Douglas Gregor return x + y; 226871981fbccba9e8a63997d58245ec0add114f49Douglas Gregor} 236871981fbccba9e8a63997d58245ec0add114f49Douglas Gregor 246871981fbccba9e8a63997d58245ec0add114f49Douglas Gregorint g2(int, int); // expected-note{{previous declaration is here}} 256871981fbccba9e8a63997d58245ec0add114f49Douglas Gregor 266871981fbccba9e8a63997d58245ec0add114f49Douglas GregorINT g2(x) // expected-error{{conflicting types for 'g2'}} 276871981fbccba9e8a63997d58245ec0add114f49Douglas Gregor int x; 286871981fbccba9e8a63997d58245ec0add114f49Douglas Gregor{ 296871981fbccba9e8a63997d58245ec0add114f49Douglas Gregor return x; 306871981fbccba9e8a63997d58245ec0add114f49Douglas Gregor} 3104495c859f81e440748a9b86baa2913461652bb0Douglas Gregor 3204495c859f81e440748a9b86baa2913461652bb0Douglas Gregorvoid test() { 3304495c859f81e440748a9b86baa2913461652bb0Douglas Gregor int f1; 3404495c859f81e440748a9b86baa2913461652bb0Douglas Gregor { 3504495c859f81e440748a9b86baa2913461652bb0Douglas Gregor void f1(double); 3604495c859f81e440748a9b86baa2913461652bb0Douglas Gregor { 3704495c859f81e440748a9b86baa2913461652bb0Douglas Gregor void f1(double); // expected-note{{previous declaration is here}} 3804495c859f81e440748a9b86baa2913461652bb0Douglas Gregor { 3904495c859f81e440748a9b86baa2913461652bb0Douglas Gregor int f1(int); // expected-error{{conflicting types for 'f1'}} 4004495c859f81e440748a9b86baa2913461652bb0Douglas Gregor } 4104495c859f81e440748a9b86baa2913461652bb0Douglas Gregor } 4204495c859f81e440748a9b86baa2913461652bb0Douglas Gregor } 4304495c859f81e440748a9b86baa2913461652bb0Douglas Gregor} 4404495c859f81e440748a9b86baa2913461652bb0Douglas Gregor 4504495c859f81e440748a9b86baa2913461652bb0Douglas Gregorextern void g3(int); // expected-note{{previous declaration is here}} 4604495c859f81e440748a9b86baa2913461652bb0Douglas Gregorstatic void g3(int x) { } // expected-error{{static declaration of 'g3' follows non-static declaration}} 4704495c859f81e440748a9b86baa2913461652bb0Douglas Gregor 4804495c859f81e440748a9b86baa2913461652bb0Douglas Gregorvoid test2() { 4904495c859f81e440748a9b86baa2913461652bb0Douglas Gregor extern int f2; // expected-note{{previous definition is here}} 5004495c859f81e440748a9b86baa2913461652bb0Douglas Gregor { 5104495c859f81e440748a9b86baa2913461652bb0Douglas Gregor void f2(int); // expected-error{{redefinition of 'f2' as different kind of symbol}} 5204495c859f81e440748a9b86baa2913461652bb0Douglas Gregor } 5304495c859f81e440748a9b86baa2913461652bb0Douglas Gregor 5404495c859f81e440748a9b86baa2913461652bb0Douglas Gregor { 5504495c859f81e440748a9b86baa2913461652bb0Douglas Gregor int f2; 5604495c859f81e440748a9b86baa2913461652bb0Douglas Gregor { 5704495c859f81e440748a9b86baa2913461652bb0Douglas Gregor void f2(int); // okay 5804495c859f81e440748a9b86baa2913461652bb0Douglas Gregor } 5904495c859f81e440748a9b86baa2913461652bb0Douglas Gregor } 6004495c859f81e440748a9b86baa2913461652bb0Douglas Gregor} 61