Home | History | Annotate | Download | only in Sema
      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