Implement codegen support for lowering "library builtins" like __builtin_isinf 
to their corresponding library routines (e.g. isinf).  This allows us to handle
all the stuff in macos math.h, and other stuff as it's added to *Builtins.def.



git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41634 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/CodeGen/CodeGenModule.cpp b/CodeGen/CodeGenModule.cpp
index a6a887f..ec3d0af 100644
--- a/CodeGen/CodeGenModule.cpp
+++ b/CodeGen/CodeGenModule.cpp
@@ -127,7 +127,11 @@
   // and for the existing one to be turned into a constantexpr cast of the
   // builtin.  In the case where the existing one is a static function, it
   // should just be renamed.
-  assert(getModule().getFunction(Name) == 0 && "FIXME: Name collision");
+  if (llvm::Function *Existing = getModule().getFunction(Name)) {
+    if (Existing->getFunctionType() == Ty && Existing->hasExternalLinkage())
+      return FunctionSlot = Existing;
+    assert(Existing == 0 && "FIXME: Name collision");
+  }
 
   // FIXME: param attributes for sext/zext etc.
   return FunctionSlot = new llvm::Function(Ty, llvm::Function::ExternalLinkage,