mirror of
https://github.com/RPCSX/llvm.git
synced 2024-11-26 05:00:26 +00:00
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
This commit is contained in:
parent
307e8ab581
commit
82cf32e5ef
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user