// RUN: %clang_cc1 -verify -fsyntax-only -fblocks -Wshadow %s int i; // expected-note 4 {{previous declaration is here}} static int s; // expected-note 2 {{previous declaration is here}} void foo(void) { int pass1; int i; // expected-warning {{declaration shadows a variable in the global scope}} \ // expected-note {{previous declaration is here}} int s; // expected-warning {{declaration shadows a variable in the global scope}} \ // expected-note {{previous declaration is here}} { int pass2; int i; // expected-warning {{declaration shadows a local variable}} \ // expected-note {{previous declaration is here}} int s; // expected-warning {{declaration shadows a local variable}} \ // expected-note {{previous declaration is here}} { int pass3; int i; // expected-warning {{declaration shadows a local variable}} int s; // expected-warning {{declaration shadows a local variable}} } } int sin; // okay; 'sin' has not been declared, even though it's a builtin. } void (^test1)(int) = ^(int i) { // expected-warning {{declaration shadows a variable in the global scope}} \ // expected-note{{previous declaration is here}} { int i; // expected-warning {{declaration shadows a local variable}} \ // expected-note{{previous declaration is here}} (^(int i) { return i; })(i); //expected-warning {{declaration shadows a local variable}} } }; struct test2 { int i; }; void test3(void) { struct test4 { int i; }; } void test4(int i) { // expected-warning {{declaration shadows a variable in the global scope}} } // Don't warn about shadowing for function declarations. void test5(int i); void test6(void (*f)(int i)) {} void test7(void *context, void (*callback)(void *context)) {} extern int bob; // expected-note {{previous declaration is here}} void rdar8883302(void) { extern int bob; // don't warn for shadowing. } void test8(void) { int bob; // expected-warning {{declaration shadows a variable in the global scope}} } enum PR24718_1{pr24718}; // expected-note {{previous declaration is here}} void PR24718(void) { enum PR24718_2{pr24718}; // expected-warning {{declaration shadows a variable in the global scope}} } struct PR24718_3; struct PR24718_4 { enum { PR24718_3 // Does not shadow a type. }; }; void static_locals() { static int i; // expected-warning {{declaration shadows a variable in the global scope}} // expected-note@-1 {{previous definition is here}} // expected-note@-2 {{previous declaration is here}} int i; // expected-error {{non-static declaration of 'i' follows static declaration}} static int foo; // expected-note {{previous declaration is here}} static int hoge; // expected-note {{previous declaration is here}} int s; // expected-warning {{declaration shadows a variable in the global scope}} { static int foo; // expected-warning {{declaration shadows a local variable}} // expected-note@-1 {{previous declaration is here}} static int i; // expected-warning {{declaration shadows a local variable}} // expected-note@-1 {{previous declaration is here}} int hoge; // expected-warning {{declaration shadows a local variable}} { static int foo; // expected-warning {{declaration shadows a local variable}} int i; // expected-warning {{declaration shadows a local variable}} extern int hoge; } } }