diff options
-rw-r--r-- | lib/CodeGen/CGBlocks.cpp | 13 | ||||
-rw-r--r-- | test/CodeGenObjC/blocks-5.m | 16 |
2 files changed, 16 insertions, 13 deletions
diff --git a/lib/CodeGen/CGBlocks.cpp b/lib/CodeGen/CGBlocks.cpp index 46b62441d6..2f0961326a 100644 --- a/lib/CodeGen/CGBlocks.cpp +++ b/lib/CodeGen/CGBlocks.cpp @@ -110,19 +110,6 @@ static bool CanBlockBeGlobal(const CodeGenFunction::BlockInfo &Info) { /// invoke function. static void AllocateAllBlockDeclRefs(const CodeGenFunction::BlockInfo &Info, CodeGenFunction *CGF) { - // Always allocate self, as it is often handy in the debugger, even if there - // is no codegen in the block that uses it. This is also useful to always do - // this as if we didn't, we'd have to figure out all code that uses a self - // pointer, including implicit uses. - if (const ObjCMethodDecl *OMD - = dyn_cast_or_null<ObjCMethodDecl>(CGF->CurFuncDecl)) { - ImplicitParamDecl *SelfDecl = OMD->getSelfDecl(); - BlockDeclRefExpr *BDRE = new (CGF->getContext()) - BlockDeclRefExpr(SelfDecl, - SelfDecl->getType(), SourceLocation(), false); - CGF->AllocateBlockDecl(BDRE); - } - // FIXME: Also always forward the this pointer in C++ as well. for (size_t i = 0; i < Info.DeclRefs.size(); ++i) diff --git a/test/CodeGenObjC/blocks-5.m b/test/CodeGenObjC/blocks-5.m new file mode 100644 index 0000000000..12c381bb74 --- /dev/null +++ b/test/CodeGenObjC/blocks-5.m @@ -0,0 +1,16 @@ +// RUN: %clang_cc1 -fblocks -triple x86_64-apple-darwin10 -emit-llvm -o - %s | FileCheck %s +// radar 7581175 + +extern void dispatch_async (void (^)(void)); + +@interface Foo +@end + +@implementation Foo +- (void)dealloc { + dispatch_async(^{}); +} +@end + +// CHECK: self.addr +// CHECK: self.addr |