1 // RUN: %clang_cc1 -verify -fsyntax-only -fblocks -Wshadow %s 2 3 int i; // expected-note 3 {{previous declaration is here}} 4 5 void 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> 23 void (^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 34 struct test2 { 35 int i; 36 }; 37 38 void test3(void) { 39 struct test4 { 40 int i; 41 }; 42 } 43 44 void test4(int i) { // expected-warning {{declaration shadows a variable in the global scope}} 45 } 46 47 // Don't warn about shadowing for function declarations. 48 void test5(int i); 49 void test6(void (*f)(int i)) {} 50 void test7(void *context, void (*callback)(void *context)) {} 51 52 extern int bob; // expected-note {{previous declaration is here}} 53 54 // rdar://8883302 55 void rdar8883302() { 56 extern int bob; // don't warn for shadowing. 57 } 58 59 void test8() { 60 int bob; // expected-warning {{declaration shadows a variable in the global scope}} 61 } 62