diff options
Diffstat (limited to 'clang/test')
-rw-r--r-- | clang/test/Sema/warn-shadow.c | 29 | ||||
-rw-r--r-- | clang/test/SemaCXX/warn-shadow.cpp | 6 |
2 files changed, 33 insertions, 2 deletions
diff --git a/clang/test/Sema/warn-shadow.c b/clang/test/Sema/warn-shadow.c index dacf66d5920..c9a783b437a 100644 --- a/clang/test/Sema/warn-shadow.c +++ b/clang/test/Sema/warn-shadow.c @@ -1,6 +1,6 @@ -// RUN: %clang_cc1 -verify -fsyntax-only -Wshadow %s +// RUN: %clang_cc1 -verify -fsyntax-only -fblocks -Wshadow %s -int i; // expected-note {{previous declaration is here}} +int i; // expected-note 3 {{previous declaration is here}} void foo() { int pass1; @@ -18,3 +18,28 @@ void foo() { 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}} +} diff --git a/clang/test/SemaCXX/warn-shadow.cpp b/clang/test/SemaCXX/warn-shadow.cpp index c637f42ea98..509c3443556 100644 --- a/clang/test/SemaCXX/warn-shadow.cpp +++ b/clang/test/SemaCXX/warn-shadow.cpp @@ -36,3 +36,9 @@ class A { char *data; // expected-warning {{declaration shadows a static data member of 'A'}} } }; + +// TODO: this should warn, <rdar://problem/5018057> +class B : A { + int data; + static int field; +}; |