summaryrefslogtreecommitdiffstats
path: root/clang/lib/CodeGen/CodeGenModule.h
diff options
context:
space:
mode:
authorDaniel Dunbar <daniel@zuster.org>2008-10-01 00:49:24 +0000
committerDaniel Dunbar <daniel@zuster.org>2008-10-01 00:49:24 +0000
commit23fd462f48ace997471c31f39a7f9c8decc18026 (patch)
tree256c69d7e65b169e507a3f66f49042bca021f16a /clang/lib/CodeGen/CodeGenModule.h
parent1df16dff64fc22bbfabaffc8ab8e5f8bc20225cd (diff)
downloadbcm5719-llvm-23fd462f48ace997471c31f39a7f9c8decc18026.tar.gz
bcm5719-llvm-23fd462f48ace997471c31f39a7f9c8decc18026.zip
Add simple interface for protecting runtime functions from name
collisions. - Provide CodeGenModule::CreateRuntimeFunction which guarantees that the function it creates will have the provided name in the final module. This allows the runtime to have its functions protected from declarations of the same name in the source code. - One could argue that this is a reason to abuse the llvm::Module namespace for dealing with function redeclarations. However, that approach seems conceptually flawed to me. This one also happens to be somewhat more efficient. No functionality change. llvm-svn: 56899
Diffstat (limited to 'clang/lib/CodeGen/CodeGenModule.h')
-rw-r--r--clang/lib/CodeGen/CodeGenModule.h13
1 files changed, 13 insertions, 0 deletions
diff --git a/clang/lib/CodeGen/CodeGenModule.h b/clang/lib/CodeGen/CodeGenModule.h
index 0a4a78d33c8..6a201be3760 100644
--- a/clang/lib/CodeGen/CodeGenModule.h
+++ b/clang/lib/CodeGen/CodeGenModule.h
@@ -73,6 +73,12 @@ class CodeGenModule {
llvm::Function *MemMoveFn;
llvm::Function *MemSetFn;
+ /// RuntimeFunctions - List of runtime functions whose names must be
+ /// protected from introducing conflicts. These functions should be
+ /// created unnamed, we will name them and patch up conflicts when
+ /// we release the module.
+ std::vector< std::pair<llvm::Function*, std::string> > RuntimeFunctions;
+
/// GlobalDeclMap - Mapping of decl names global variables we have
/// already emitted. Note that the entries in this map are the
/// actual globals and therefore may not be of the same type as the
@@ -195,6 +201,11 @@ public:
void AddAnnotation(llvm::Constant *C) { Annotations.push_back(C); }
+ /// CreateRuntimeFunction - Create a new runtime function whose name
+ /// must be protected from collisions.
+ llvm::Function *CreateRuntimeFunction(const llvm::FunctionType *Ty,
+ const std::string &Name);
+
void UpdateCompletedType(const TagDecl *D);
llvm::Constant *EmitConstantExpr(const Expr *E, CodeGenFunction *CGF = 0);
llvm::Constant *EmitAnnotateAttr(llvm::GlobalValue *GV,
@@ -263,6 +274,8 @@ private:
void EmitAliases(void);
void EmitAnnotations(void);
void EmitStatics(void);
+
+ void BindRuntimeFunctions();
};
} // end namespace CodeGen
} // end namespace clang
OpenPOWER on IntegriCloud