| // RUN: %clang_cc1 -verify -fsyntax-only -fblocks -Wshadow %s | 
 |  | 
 | int i;          // expected-note 3 {{previous declaration is here}} | 
 |  | 
 | void foo() { | 
 |   int pass1; | 
 |   int i;        // 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 pass3; | 
 |       int i;    // expected-warning {{declaration shadows a local variable}} | 
 |     } | 
 |   } | 
 |  | 
 |   int sin; // okay; 'sin' has not been declared, even though it's a builtin. | 
 | } | 
 |  | 
 | // <rdar://problem/7677531> | 
 | 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}} | 
 |  | 
 | // rdar://8883302 | 
 | void rdar8883302() { | 
 |   extern int bob; // don't warn for shadowing. | 
 | } | 
 |  | 
 | void test8() { | 
 |   int bob; // expected-warning {{declaration shadows a variable in the global scope}} | 
 | } |