// Temporary code to enable testing of __block variables
// #include "clang/Frontend/CompileOptions.h"
#include "llvm/Support/CommandLine.h"
-static llvm::cl::opt<bool>
-Enable__block("f__block",
- // See all the FIXMEs for the various work that needs to be done
- llvm::cl::desc("temporary option to turn on __block precessing "
- "even though the code isn't done yet"),
- llvm::cl::ValueDisallowed, llvm::cl::AllowInverse,
- llvm::cl::ZeroOrMore,
- llvm::cl::init(true));
llvm::Constant *CodeGenFunction::
BuildDescriptorBlockDecl(bool BlockHasCopyDispose, uint64_t Size,
BlockHasCopyDispose |= subBlockHasCopyDispose;
Elts[3] = Fn;
- if (!Enable__block && BlockHasCopyDispose)
- ErrorUnsupported(BE, "block literal that requires copy/dispose");
-
if (subBlockHasCopyDispose)
flags |= BLOCK_HAS_COPY_DISPOSE;
const llvm::Type *Ty;
Ty = CGM.getTypes().ConvertType(E->getDecl()->getType());
- if (!Enable__block && E->isByRef())
- ErrorUnsupported(E, "__block variable in block literal");
- else if (!Enable__block && E->getType()->isBlockPointerType())
- ErrorUnsupported(E, "block pointer in block literal");
- else if (!Enable__block && (E->getDecl()->getAttr<ObjCNSObjectAttr>() ||
- getContext().isObjCNSObjectType(E->getType())))
- ErrorUnsupported(E, "__attribute__((NSObject)) variable in block "
- "literal");
- else if (!Enable__block && getContext().isObjCObjectPointerType(E->getType()))
- ErrorUnsupported(E, "Objective-C variable in block literal");
-
// See if we have already allocated an offset for this variable.
if (offset == 0) {
// Don't run the expensive check, unless we have to.
+++ /dev/null
-// RUN: clang-cc -fblocks -fno-__block -fnext-runtime --emit-llvm -o %t %s -verify
-
-@class Foo;
-@protocol P;
-
-void t1()
-{
- __block int a;
- ^{ a = 10; }(); // expected-error {{cannot compile this __block variable in block literal yet}} expected-error {{cannot compile this block literal that requires copy/dispose yet}}
-
- void (^block)(void);
- ^{ (void)block; }(); // expected-error {{cannot compile this block pointer in block literal yet}} expected-error {{cannot compile this block literal that requires copy/dispose yet}}
-
- struct Foo *__attribute__ ((NSObject)) foo;
- ^{ (void)foo; }(); // expected-error {{cannot compile this __attribute__((NSObject)) variable in block literal yet}} expected-error {{cannot compile this block literal that requires copy/dispose yet}}
-
- typedef struct CGColor * __attribute__ ((NSObject)) CGColorRef;
- CGColorRef color;
- ^{ (void)color; }(); // expected-error {{cannot compile this __attribute__((NSObject)) variable in block literal yet}} expected-error {{cannot compile this block literal that requires copy/dispose yet}}
-
- id a1;
- ^{ (void)a1; }(); // expected-error {{cannot compile this Objective-C variable in block literal yet}} expected-error {{cannot compile this block literal that requires copy/dispose yet}}
-
- Foo *a2;
- ^{ (void)a2; }(); // expected-error {{cannot compile this Objective-C variable in block literal yet}} expected-error {{cannot compile this block literal that requires copy/dispose yet}}
-
- id<P> a3;
- ^{ (void)a3; }(); // expected-error {{cannot compile this Objective-C variable in block literal yet}} expected-error {{cannot compile this block literal that requires copy/dispose yet}}
-
- Foo<P> *a4;
- ^{ (void)a4; }(); // expected-error {{cannot compile this Objective-C variable in block literal yet}} expected-error {{cannot compile this block literal that requires copy/dispose yet}}
-}