blob: 32aca8d612b21d6d412e47df0145a43bfe7f2e42 [file] [log] [blame]
John McCalla369a952010-03-20 04:12:52 +00001// RUN: %clang_cc1 -verify -fsyntax-only -fblocks -Wshadow %s
John McCall9a8cb8d2010-03-16 21:50:59 +00002
John McCalla369a952010-03-20 04:12:52 +00003int i; // expected-note 3 {{previous declaration is here}}
John McCall9a8cb8d2010-03-16 21:50:59 +00004
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
Douglas Gregorc48c9162010-03-17 16:03:44 +000019 int sin; // okay; 'sin' has not been declared, even though it's a builtin.
John McCall9a8cb8d2010-03-16 21:50:59 +000020}
John McCalla369a952010-03-20 04:12:52 +000021
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}
John McCall053f4bd2010-03-22 09:20:08 +000046
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)) {}
Argyrios Kyrtzidis6df96e02011-01-31 07:04:41 +000051
Argyrios Kyrtzidis49a61722011-01-31 07:04:50 +000052extern int bob; // expected-note {{previous declaration is here}}
53
Argyrios Kyrtzidis6df96e02011-01-31 07:04:41 +000054// rdar://8883302
Argyrios Kyrtzidis6df96e02011-01-31 07:04:41 +000055void rdar8883302() {
56 extern int bob; // don't warn for shadowing.
57}
Argyrios Kyrtzidis49a61722011-01-31 07:04:50 +000058
59void test8() {
60 int bob; // expected-warning {{declaration shadows a variable in the global scope}}
61}