diff options
author | Mike Stump <mrs@apple.com> | 2009-03-09 06:40:26 +0000 |
---|---|---|
committer | Mike Stump <mrs@apple.com> | 2009-03-09 06:40:26 +0000 |
commit | 53d89225560fb9434a68e25019a31a75c0006537 (patch) | |
tree | d39bca33e9959491d2bdd92105da3bea4636a1a6 /lib/CodeGen/CodeGenModule.h | |
parent | b21f07e056b6c9918bf938f19ca561c60f778695 (diff) |
Be sure to never create two functions with the same name, instead arrange to
reuse the prior one.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@66408 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen/CodeGenModule.h')
-rw-r--r-- | lib/CodeGen/CodeGenModule.h | 29 |
1 files changed, 16 insertions, 13 deletions
diff --git a/lib/CodeGen/CodeGenModule.h b/lib/CodeGen/CodeGenModule.h index c3a84af0c5..039579ffc5 100644 --- a/lib/CodeGen/CodeGenModule.h +++ b/lib/CodeGen/CodeGenModule.h @@ -312,14 +312,17 @@ private: void EmitGlobalDefinition(const ValueDecl *D); - /// EmitForwardFunctionDefinition - Create a new function for the - /// given decl and set attributes as appropriate. + /// EmitForwardFunctionDefinition - Create a new function for the given decl + /// and set attributes as appropriate if ReplaceExisting is true, or if the + /// same named declaration doesn't already exist in the module table, + /// otherwise return the existing function from the module table. /// - /// \arg Ty - If non-null the LLVM function type to use for the - /// decl; it is the callers responsibility to make sure this is - /// compatible with the correct type. + /// \arg Ty - If non-null the LLVM function type to use for the decl; it is + /// the callers responsibility to make sure this is compatible with the + /// correct type. llvm::GlobalValue *EmitForwardFunctionDefinition(const FunctionDecl *D, - const llvm::Type *Ty); + const llvm::Type *Ty, + bool ReplaceExisting=false); void EmitGlobalFunctionDefinition(const FunctionDecl *D); void EmitGlobalVarDefinition(const VarDecl *D); @@ -337,19 +340,19 @@ private: void EmitAliases(void); void EmitAnnotations(void); - /// EmitDeferred - Emit any needed decls for which code generation - /// was deferred. + /// EmitDeferred - Emit any needed decls for which code generation was + /// deferred. void EmitDeferred(void); - /// EmitLLVMUsed - Emit the llvm.used metadata used to force - /// references to global which may otherwise be optimized out. + /// EmitLLVMUsed - Emit the llvm.used metadata used to force references to + /// global which may otherwise be optimized out. void EmitLLVMUsed(void); void BindRuntimeGlobals(); - /// MayDeferGeneration - Determine if the given decl can be emitted - /// lazily; this is only relevant for definitions. The given decl - /// must be either a function or var decl. + /// MayDeferGeneration - Determine if the given decl can be emitted lazily; + /// this is only relevant for definitions. The given decl must be either a + /// function or var decl. bool MayDeferGeneration(const ValueDecl *D); }; } // end namespace CodeGen |