summaryrefslogtreecommitdiff
path: root/lib/Transforms
diff options
context:
space:
mode:
authorAndrew Lenharth <andrewl@lenharth.org>2008-10-07 18:08:38 +0000
committerAndrew Lenharth <andrewl@lenharth.org>2008-10-07 18:08:38 +0000
commit82cf32e5efbb1f49ddd5742743599fa7f23ab925 (patch)
tree687d82cd25567f85f4d67ef575fb25f769c96802 /lib/Transforms
parent307e8ab581007eee66176cb008366ef486f3b87c (diff)
downloadllvm-82cf32e5efbb1f49ddd5742743599fa7f23ab925.tar.gz
llvm-82cf32e5efbb1f49ddd5742743599fa7f23ab925.tar.bz2
llvm-82cf32e5efbb1f49ddd5742743599fa7f23ab925.tar.xz
Correctly set attributes when removing args during cloning. Fixes PR2765
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@57254 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Transforms')
-rw-r--r--lib/Transforms/Utils/CloneFunction.cpp18
1 files changed, 17 insertions, 1 deletions
diff --git a/lib/Transforms/Utils/CloneFunction.cpp b/lib/Transforms/Utils/CloneFunction.cpp
index 9e3fe32992..fe2a606cf7 100644
--- a/lib/Transforms/Utils/CloneFunction.cpp
+++ b/lib/Transforms/Utils/CloneFunction.cpp
@@ -81,7 +81,23 @@ void llvm::CloneFunctionInto(Function *NewFunc, const Function *OldFunc,
#endif
// Clone any attributes.
- NewFunc->copyAttributesFrom(OldFunc);
+ if (NewFunc->arg_size() == OldFunc->arg_size())
+ NewFunc->copyAttributesFrom(OldFunc);
+ else {
+ //Some arguments were deleted with the ValueMap. 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>(ValueMap[I]))
+ Anew->addAttr( OldFunc->getAttributes()
+ .getParamAttributes(I->getArgNo() + 1));
+ NewFunc->setAttributes(NewFunc->getAttributes()
+ .addAttr(0, OldFunc->getAttributes()
+ .getRetAttributes()));
+ NewFunc->setAttributes(NewFunc->getAttributes()
+ .addAttr(~0, OldFunc->getAttributes()
+ .getFnAttributes()));
+
+ }
// Loop over all of the basic blocks in the function, cloning them as
// appropriate. Note that we save BE this way in order to handle cloning of