1// RUN: %clang_cc1 -verify -fsyntax-only -fblocks -Wshadow %s 2 3int i; // expected-note 3 {{previous declaration is here}} 4 5void foo() { 6 int pass1; 7 int i; // expected-warning {{declaration shadows a variable in the global scope}} \ 8 // expected-note {{previous declaration is here}} 9 { 10 int pass2; 11 int i; // expected-warning {{declaration shadows a local variable}} \ 12 // expected-note {{previous declaration is here}} 13 { 14 int pass3; 15 int i; // expected-warning {{declaration shadows a local variable}} 16 } 17 } 18 19 int sin; // okay; 'sin' has not been declared, even though it's a builtin. 20} 21 22// <rdar://problem/7677531> 23void (^test1)(int) = ^(int i) { // expected-warning {{declaration shadows a variable in the global scope}} \ 24 // expected-note{{previous declaration is here}} 25 { 26 int i; // expected-warning {{declaration shadows a local variable}} \ 27 // expected-note{{previous declaration is here}} 28 29 (^(int i) { return i; })(i); //expected-warning {{declaration shadows a local variable}} 30 } 31}; 32 33 34struct test2 { 35 int i; 36}; 37 38void test3(void) { 39 struct test4 { 40 int i; 41 }; 42} 43 44void test4(int i) { // expected-warning {{declaration shadows a variable in the global scope}} 45} 46 47// Don't warn about shadowing for function declarations. 48void test5(int i); 49void test6(void (*f)(int i)) {} 50void test7(void *context, void (*callback)(void *context)) {} 51 52extern int bob; // expected-note {{previous declaration is here}} 53 54// rdar://8883302 55void rdar8883302() { 56 extern int bob; // don't warn for shadowing. 57} 58 59void test8() { 60 int bob; // expected-warning {{declaration shadows a variable in the global scope}} 61} 62