diff options
author | Fariborz Jahanian <fjahanian@apple.com> | 2010-03-16 23:39:51 +0000 |
---|---|---|
committer | Fariborz Jahanian <fjahanian@apple.com> | 2010-03-16 23:39:51 +0000 |
commit | fa24e1066f519c92fbc3d5721744d634df7b8baa (patch) | |
tree | c4b7e4d18349d1bfe03bbb616e02c4f06c6a0a73 | |
parent | c7ba918b8417533ae89e2c18aaf1b26879536edc (diff) | |
download | bcm5719-llvm-fa24e1066f519c92fbc3d5721744d634df7b8baa.tar.gz bcm5719-llvm-fa24e1066f519c92fbc3d5721744d634df7b8baa.zip |
Issue error when a byref array is accessed in a block
literal. Fixes radar 7760213.
llvm-svn: 98693
-rw-r--r-- | clang/lib/Sema/SemaExpr.cpp | 2 | ||||
-rw-r--r-- | clang/test/Sema/block-byref-args.c | 22 | ||||
-rw-r--r-- | clang/test/Sema/block-misc.c | 2 |
3 files changed, 3 insertions, 23 deletions
diff --git a/clang/lib/Sema/SemaExpr.cpp b/clang/lib/Sema/SemaExpr.cpp index 32ed3e0006e..d80b25d332c 100644 --- a/clang/lib/Sema/SemaExpr.cpp +++ b/clang/lib/Sema/SemaExpr.cpp @@ -1691,7 +1691,7 @@ Sema::BuildDeclarationNameExpr(const CXXScopeSpec &SS, return ExprError(); } - if (VD->getType()->isArrayType() && !VD->hasAttr<BlocksAttr>()) { + if (VD->getType()->isArrayType()) { Diag(Loc, diag::err_ref_array_type); Diag(D->getLocation(), diag::note_declared_at); return ExprError(); diff --git a/clang/test/Sema/block-byref-args.c b/clang/test/Sema/block-byref-args.c deleted file mode 100644 index 255c97b280c..00000000000 --- a/clang/test/Sema/block-byref-args.c +++ /dev/null @@ -1,22 +0,0 @@ -// RUN: %clang_cc1 %s -fsyntax-only -verify -fblocks - -int printf(const char *, ...); - -int main(int argc, char **argv) { - __block void(*bobTheFunction)(void); - __block void(^bobTheBlock)(void); - - bobTheBlock = ^{;}; - - __block int JJJJ; - __attribute__((__blocks__(byref))) int III; - - int (^XXX)(void) = ^{ return III+JJJJ; }; - - // rdar 7671883 - __block char array[10] = {'a', 'b', 'c', 'd'}; - char (^ch)() = ^{ array[1] = 'X'; return array[5]; }; - ch(); - - return 0; -} diff --git a/clang/test/Sema/block-misc.c b/clang/test/Sema/block-misc.c index 1109be6311b..ca71ab12b26 100644 --- a/clang/test/Sema/block-misc.c +++ b/clang/test/Sema/block-misc.c @@ -214,8 +214,10 @@ void test20() { // radr://7438948 void test21() { int a[7]; // expected-note {{declared at}} + __block int b[10]; // expected-note {{declared at}} a[1] = 1; ^{ (void)a[1]; // expected-error {{cannot refer to declaration with an array type inside block}} + (void)b[1]; // expected-error {{cannot refer to declaration with an array type inside block}} }(); } |