mirror of
https://github.com/RPCS3/llvm.git
synced 2024-11-25 04:39:51 +00:00
Make sure that intrinsics automagically get the
right parameter attributes no matter how they are obtained. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@49335 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
dc1adac582
commit
79ab3e8014
@ -160,6 +160,10 @@ Function::Function(const FunctionType *Ty, LinkageTypes Linkage,
|
||||
|
||||
if (ParentModule)
|
||||
ParentModule->getFunctionList().push_back(this);
|
||||
|
||||
// Ensure intrinsics have the right parameter attributes.
|
||||
if (unsigned IID = getIntrinsicID(true))
|
||||
setParamAttrs(Intrinsic::getParamAttrs(Intrinsic::ID(IID)));
|
||||
}
|
||||
|
||||
Function::~Function() {
|
||||
@ -328,11 +332,9 @@ Function *Intrinsic::getDeclaration(Module *M, ID id, const Type **Tys,
|
||||
unsigned numTys) {
|
||||
// There can never be multiple globals with the same name of different types,
|
||||
// because intrinsics must be a specific type.
|
||||
Function *F =
|
||||
return
|
||||
cast<Function>(M->getOrInsertFunction(getName(id, Tys, numTys),
|
||||
getType(id, Tys, numTys)));
|
||||
F->setParamAttrs(getParamAttrs(id));
|
||||
return F;
|
||||
}
|
||||
|
||||
Value *IntrinsicInst::StripPointerCasts(Value *Ptr) {
|
||||
|
@ -1452,6 +1452,10 @@ void Verifier::VerifyIntrinsicPrototype(Intrinsic::ID ID,
|
||||
F->getName().substr(Name.length()) + "'. It should be '" +
|
||||
Suffix + "'", F);
|
||||
}
|
||||
|
||||
// Check parameter attributes.
|
||||
Assert1(F->getParamAttrs() == Intrinsic::getParamAttrs(ID),
|
||||
"Intrinsic has wrong parameter attributes!", F);
|
||||
}
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user