merge functions with multiple function decls if they have the same name.


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@44505 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/CodeGen/CodeGenModule.cpp b/CodeGen/CodeGenModule.cpp
index 54009b0..b76d5e3 100644
--- a/CodeGen/CodeGenModule.cpp
+++ b/CodeGen/CodeGenModule.cpp
@@ -40,6 +40,13 @@
   const llvm::Type *Ty = getTypes().ConvertType(ASTTy);
   if (isa<FunctionDecl>(D)) {
     const llvm::FunctionType *FTy = cast<llvm::FunctionType>(Ty);
+    
+    // Check to see if the function already exists.
+    if (llvm::Function *F = getModule().getFunction(D->getName())) {
+      // If so, make sure it is the correct type.
+      return llvm::ConstantExpr::getBitCast(F, llvm::PointerType::get(FTy));
+    }
+    
     // FIXME: param attributes for sext/zext etc.
     return Entry = new llvm::Function(FTy, llvm::Function::ExternalLinkage,
                                       D->getName(), &getModule());