summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFariborz Jahanian <fjahanian@apple.com>2010-03-16 23:39:51 +0000
committerFariborz Jahanian <fjahanian@apple.com>2010-03-16 23:39:51 +0000
commitfa24e1066f519c92fbc3d5721744d634df7b8baa (patch)
treec4b7e4d18349d1bfe03bbb616e02c4f06c6a0a73
parentc7ba918b8417533ae89e2c18aaf1b26879536edc (diff)
downloadbcm5719-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.cpp2
-rw-r--r--clang/test/Sema/block-byref-args.c22
-rw-r--r--clang/test/Sema/block-misc.c2
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}}
}();
}
OpenPOWER on IntegriCloud