Handle arguments passed in through the va_arg area
authorChris Lattner <sabre@nondot.org>
Wed, 18 Jun 2003 16:25:51 +0000 (16:25 +0000)
committerChris Lattner <sabre@nondot.org>
Wed, 18 Jun 2003 16:25:51 +0000 (16:25 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@6769 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Transforms/IPO/DeadArgumentElimination.cpp

index f1599c361ff569c4763b858ecdc63730aaf47347..ad4e0e2b8158125f85a8c39df665074712eadd25 100644 (file)
@@ -79,7 +79,13 @@ static ArgumentLiveness getArgumentLiveness(const Argument &A) {
     Function *Callee = CS.getCalledFunction();
     if (!Callee) return Alive;
 
-    // FIXME: check to see if it's passed through a va_arg area
+    // Check to see if it's passed through a va_arg area: if so, we cannot
+    // remove it.
+    unsigned NumFixedArgs = Callee->getFunctionType()->getNumParams();
+    for (CallSite::arg_iterator AI = CS.arg_begin()+NumFixedArgs;
+         AI != CS.arg_end(); ++AI)
+      if (AI->get() == &A) // If passed through va_arg area, we cannot remove it
+        return Alive;
   }
 
   return MaybeLive;  // It must be used, but only as argument to a function