Fixed a crash when cloning a function into a function with
authorPekka Jaaskelainen <pekka.jaaskelainen@tut.fi>
Thu, 7 Mar 2013 16:46:43 +0000 (16:46 +0000)
committerPekka Jaaskelainen <pekka.jaaskelainen@tut.fi>
Thu, 7 Mar 2013 16:46:43 +0000 (16:46 +0000)
different size argument list and without attributes in the
arguments.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@176632 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Transforms/Utils/CloneFunction.cpp

index a309bce5448d081048c46c26258ed4183a2f8e7f..63d7a1d52aa534b27a1fc63dbe3a44339b6c266b 100644 (file)
@@ -94,9 +94,12 @@ void llvm::CloneFunctionInto(Function *NewFunc, const Function *OldFunc,
     //Some arguments were deleted with the VMap. Copy arguments one by one
     for (Function::const_arg_iterator I = OldFunc->arg_begin(), 
            E = OldFunc->arg_end(); I != E; ++I)
-      if (Argument* Anew = dyn_cast<Argument>(VMap[I]))
-        Anew->addAttr(OldFunc->getAttributes()
-                       .getParamAttributes(I->getArgNo() + 1));
+      if (Argument* Anew = dyn_cast<Argument>(VMap[I])) {
+        AttributeSet attrs = OldFunc->getAttributes()
+          .getParamAttributes(I->getArgNo() + 1);
+        if (attrs.getNumSlots() > 0)
+          Anew->addAttr(attrs);
+      }
     NewFunc->setAttributes(NewFunc->getAttributes()
                            .addAttributes(NewFunc->getContext(),
                                           AttributeSet::ReturnIndex,