summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFariborz Jahanian <fjahanian@apple.com>2010-03-06 01:58:53 +0000
committerFariborz Jahanian <fjahanian@apple.com>2010-03-06 01:58:53 +0000
commitaf9553a23aba9bd1a5bfb7d57d405f25b2446875 (patch)
tree231719afdeb7006ea82d83c73bcf4e4ca1e36d14
parent0f5f54784af1a7c7b2022fab14d61a7c3a1d9841 (diff)
downloadbcm5719-llvm-af9553a23aba9bd1a5bfb7d57d405f25b2446875.tar.gz
bcm5719-llvm-af9553a23aba9bd1a5bfb7d57d405f25b2446875.zip
Allow use of byref (__block attributed) arrays inside
the block. Fixes radar 7671883. llvm-svn: 97863
-rw-r--r--clang/lib/Sema/SemaExpr.cpp2
-rw-r--r--clang/test/Sema/block-byref-args.c6
2 files changed, 6 insertions, 2 deletions
diff --git a/clang/lib/Sema/SemaExpr.cpp b/clang/lib/Sema/SemaExpr.cpp
index d8648f2b692..10001c356d1 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()) {
+ if (VD->getType()->isArrayType() && !VD->hasAttr<BlocksAttr>()) {
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
index 7b7cc3d2c49..255c97b280c 100644
--- a/clang/test/Sema/block-byref-args.c
+++ b/clang/test/Sema/block-byref-args.c
@@ -13,6 +13,10 @@ int main(int argc, char **argv) {
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;
}
-
OpenPOWER on IntegriCloud