From dde601d0eb6ffe64aea2f72e0baf8548247dbb4c Mon Sep 17 00:00:00 2001
From: Chris Lattner <sabre@nondot.org>
Date: Mon, 3 Mar 2003 19:57:46 +0000
Subject: [PATCH] Eliminate tons of bogus warnings

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@5686 91177308-0d34-0410-b5e6-96231b3b80d8
---
 lib/Transforms/IPO/FunctionResolution.cpp | 18 ++++++++++--------
 1 file changed, 10 insertions(+), 8 deletions(-)

diff --git a/lib/Transforms/IPO/FunctionResolution.cpp b/lib/Transforms/IPO/FunctionResolution.cpp
index 44c6dfa31cf..734b62b9dc2 100644
--- a/lib/Transforms/IPO/FunctionResolution.cpp
+++ b/lib/Transforms/IPO/FunctionResolution.cpp
@@ -128,7 +128,8 @@ static bool ResolveFunctions(Module &M, std::vector<GlobalValue*> &Globals,
       const FunctionType *OldMT = Old->getFunctionType();
       const FunctionType *ConcreteMT = Concrete->getFunctionType();
       
-      if (OldMT->getParamTypes().size() <= ConcreteMT->getParamTypes().size())
+      if (OldMT->getParamTypes().size() < ConcreteMT->getParamTypes().size() &&
+          !ConcreteMT->isVarArg())
         if (!Old->use_empty()) {
           std::cerr << "WARNING: Linking function '" << Old->getName()
                     << "' is causing arguments to be dropped.\n";
@@ -145,13 +146,14 @@ static bool ResolveFunctions(Module &M, std::vector<GlobalValue*> &Globals,
       unsigned NumArguments = std::min(OldMT->getParamTypes().size(),
                                        ConcreteMT->getParamTypes().size());
 
-      for (unsigned i = 0; i < NumArguments; ++i)
-        if (OldMT->getParamTypes()[i] != ConcreteMT->getParamTypes()[i]) {
-          std::cerr << "funcresolve: Function [" << Old->getName()
-                    << "]: Parameter types conflict for: '" << OldMT
-                    << "' and '" << ConcreteMT << "'\n";
-          return Changed;
-        }
+      if (!Old->use_empty() && !Concrete->use_empty())
+        for (unsigned i = 0; i < NumArguments; ++i)
+          if (OldMT->getParamTypes()[i] != ConcreteMT->getParamTypes()[i]) {
+            std::cerr << "WARNING: Function [" << Old->getName()
+                      << "]: Parameter types conflict for: '" << OldMT
+                      << "' and '" << ConcreteMT << "'\n";
+            return Changed;
+          }
       
       // Attempt to convert all of the uses of the old function to the
       // concrete form of the function.  If there is a use of the fn that