]> granicus.if.org Git - clang/commitdiff
Issue error when a byref array is accessed in a block
authorFariborz Jahanian <fjahanian@apple.com>
Tue, 16 Mar 2010 23:39:51 +0000 (23:39 +0000)
committerFariborz Jahanian <fjahanian@apple.com>
Tue, 16 Mar 2010 23:39:51 +0000 (23:39 +0000)
literal. Fixes radar 7760213.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@98693 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Sema/SemaExpr.cpp
test/Sema/block-byref-args.c [deleted file]
test/Sema/block-misc.c

index 32ed3e0006e5f21143477ce84132c7c8c499af7f..d80b25d332c1d54d05147d75f584a761c6510d43 100644 (file)
@@ -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/test/Sema/block-byref-args.c b/test/Sema/block-byref-args.c
deleted file mode 100644 (file)
index 255c97b..0000000
+++ /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;
-}
index 1109be6311b0f66e383c9b16de1fa2addbe0d985..ca71ab12b2681a5d93cccaedd04d5bb7aad98676 100644 (file)
@@ -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}}
   }();
 }