mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-24 03:33:20 +01:00
Correctly set attributes when removing args during cloning. Fixes PR2765
llvm-svn: 57254
This commit is contained in:
parent
782e55a101
commit
c83731e00a
@ -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