From: Chris Lattner Date: Wed, 13 May 2009 02:50:56 +0000 (+0000) Subject: Fix rdar://6880259 - invalid function name in block call (__NSConcreteGlobalBlock2) X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=e2f79b6a4f9114738fe50ee30eb222945d914341;p=clang Fix rdar://6880259 - invalid function name in block call (__NSConcreteGlobalBlock2) by using the appropriate CGM interface instead of directly creating a global. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@71617 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/clang.xcodeproj/project.pbxproj b/clang.xcodeproj/project.pbxproj index 3dfe6658ca..e087e8233b 100644 --- a/clang.xcodeproj/project.pbxproj +++ b/clang.xcodeproj/project.pbxproj @@ -1231,8 +1231,8 @@ 9063F2290F9E911F002F7251 /* SourceManagerInternals.h */, DE46BF270AE0A82D00CC047C /* TargetInfo.h */, 9063F22A0F9E911F002F7251 /* TemplateKinds.h */, - DED7D7370A524295003AD0FB /* TokenKinds.def */, DED7D7380A524295003AD0FB /* TokenKinds.h */, + DED7D7370A524295003AD0FB /* TokenKinds.def */, DEB089EE0F12F1D900522C07 /* TypeTraits.h */, ); name = Basic; diff --git a/lib/CodeGen/CGBlocks.cpp b/lib/CodeGen/CGBlocks.cpp index dee9d4ce9b..b04a942e4f 100644 --- a/lib/CodeGen/CGBlocks.cpp +++ b/lib/CodeGen/CGBlocks.cpp @@ -16,16 +16,10 @@ #include "clang/AST/DeclObjC.h" #include "llvm/Module.h" #include "llvm/Target/TargetData.h" - #include - using namespace clang; using namespace CodeGen; -// Temporary code to enable testing of __block variables -// #include "clang/Frontend/CompileOptions.h" -#include "llvm/Support/CommandLine.h" - llvm::Constant *CodeGenFunction:: BuildDescriptorBlockDecl(bool BlockHasCopyDispose, uint64_t Size, const llvm::StructType* Ty, @@ -63,34 +57,16 @@ BuildDescriptorBlockDecl(bool BlockHasCopyDispose, uint64_t Size, } llvm::Constant *BlockModule::getNSConcreteGlobalBlock() { - if (NSConcreteGlobalBlock) - return NSConcreteGlobalBlock; - - // FIXME: We should have a CodeGenModule::AddRuntimeVariable that does the - // same thing as CreateRuntimeFunction if there's already a variable with the - // same name. - NSConcreteGlobalBlock - = new llvm::GlobalVariable(PtrToInt8Ty, false, - llvm::GlobalValue::ExternalLinkage, - 0, "_NSConcreteGlobalBlock", - &getModule()); - + if (NSConcreteGlobalBlock == 0) + NSConcreteGlobalBlock = CGM.CreateRuntimeVariable(PtrToInt8Ty, + "_NSConcreteGlobalBlock"); return NSConcreteGlobalBlock; } llvm::Constant *BlockModule::getNSConcreteStackBlock() { - if (NSConcreteStackBlock) - return NSConcreteStackBlock; - - // FIXME: We should have a CodeGenModule::AddRuntimeVariable that does the - // same thing as CreateRuntimeFunction if there's already a variable with the - // same name. - NSConcreteStackBlock - = new llvm::GlobalVariable(PtrToInt8Ty, false, - llvm::GlobalValue::ExternalLinkage, - 0, "_NSConcreteStackBlock", - &getModule()); - + if (NSConcreteStackBlock == 0) + NSConcreteStackBlock = CGM.CreateRuntimeVariable(PtrToInt8Ty, + "_NSConcreteStackBlock"); return NSConcreteStackBlock; } @@ -115,8 +91,7 @@ static void CollectBlockDeclRefInfo(const Stmt *S, /// CanBlockBeGlobal - Given a BlockInfo struct, determines if a block can be /// declared as a global variable instead of on the stack. -static bool CanBlockBeGlobal(const CodeGenFunction::BlockInfo &Info) -{ +static bool CanBlockBeGlobal(const CodeGenFunction::BlockInfo &Info) { return Info.ByRefDeclRefs.empty() && Info.ByCopyDeclRefs.empty(); }