1*67e74705SXin Li // RUN: %clang -Wmissing-variable-declarations -fsyntax-only -Xclang -verify %s 2*67e74705SXin Li 3*67e74705SXin Li // Variable declarations that should trigger a warning. 4*67e74705SXin Li int vbad1; // expected-warning{{no previous extern declaration for non-static variable 'vbad1'}} 5*67e74705SXin Li int vbad2 = 10; // expected-warning{{no previous extern declaration for non-static variable 'vbad2'}} 6*67e74705SXin Li 7*67e74705SXin Li namespace x { 8*67e74705SXin Li int vbad3; // expected-warning{{no previous extern declaration for non-static variable 'vbad3'}} 9*67e74705SXin Li } 10*67e74705SXin Li 11*67e74705SXin Li // Variable declarations that should not trigger a warning. 12*67e74705SXin Li static int vgood1; 13*67e74705SXin Li extern int vgood2; 14*67e74705SXin Li int vgood2; 15*67e74705SXin Li static struct { 16*67e74705SXin Li int mgood1; 17*67e74705SXin Li } vgood3; 18*67e74705SXin Li 19*67e74705SXin Li // Functions should never trigger a warning. 20*67e74705SXin Li void fgood1(void); fgood2(void)21*67e74705SXin Livoid fgood2(void) { 22*67e74705SXin Li int lgood1; 23*67e74705SXin Li static int lgood2; 24*67e74705SXin Li } fgood3(void)25*67e74705SXin Listatic void fgood3(void) { 26*67e74705SXin Li int lgood3; 27*67e74705SXin Li static int lgood4; 28*67e74705SXin Li } 29*67e74705SXin Li 30*67e74705SXin Li // Structures, namespaces and classes should be unaffected. 31*67e74705SXin Li struct sgood1 { 32*67e74705SXin Li int mgood2; 33*67e74705SXin Li }; 34*67e74705SXin Li struct { 35*67e74705SXin Li int mgood3; 36*67e74705SXin Li } sgood2; 37*67e74705SXin Li class CGood1 { 38*67e74705SXin Li static int MGood1; 39*67e74705SXin Li }; 40*67e74705SXin Li int CGood1::MGood1; 41*67e74705SXin Li namespace { 42*67e74705SXin Li int mgood4; 43*67e74705SXin Li } 44*67e74705SXin Li 45*67e74705SXin Li class C { test()46*67e74705SXin Li void test() { 47*67e74705SXin Li static int x = 0; // no-warn 48*67e74705SXin Li } 49*67e74705SXin Li }; 50