aboutsummaryrefslogtreecommitdiff
path: root/lib/CodeGen/CGBlocks.cpp
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2009-05-13 02:50:56 +0000
committerChris Lattner <sabre@nondot.org>2009-05-13 02:50:56 +0000
commite2f79b6a4f9114738fe50ee30eb222945d914341 (patch)
tree6eb90a7c3ba22030485d22e630cf840be00e50e9 /lib/CodeGen/CGBlocks.cpp
parent9fc9e77c2fd15a88bd19ff3fdc9eb9716742f720 (diff)
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
Diffstat (limited to 'lib/CodeGen/CGBlocks.cpp')
-rw-r--r--lib/CodeGen/CGBlocks.cpp39
1 files changed, 7 insertions, 32 deletions
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 <algorithm>
-
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();
}