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:
Duncan Sands 2008-04-07 13:39:11 +00:00
parent dc1adac582
commit 79ab3e8014
2 changed files with 9 additions and 3 deletions

View File

@ -160,6 +160,10 @@ Function::Function(const FunctionType *Ty, LinkageTypes Linkage,
if (ParentModule) if (ParentModule)
ParentModule->getFunctionList().push_back(this); 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() { Function::~Function() {
@ -328,11 +332,9 @@ Function *Intrinsic::getDeclaration(Module *M, ID id, const Type **Tys,
unsigned numTys) { unsigned numTys) {
// There can never be multiple globals with the same name of different types, // There can never be multiple globals with the same name of different types,
// because intrinsics must be a specific type. // because intrinsics must be a specific type.
Function *F = return
cast<Function>(M->getOrInsertFunction(getName(id, Tys, numTys), cast<Function>(M->getOrInsertFunction(getName(id, Tys, numTys),
getType(id, Tys, numTys))); getType(id, Tys, numTys)));
F->setParamAttrs(getParamAttrs(id));
return F;
} }
Value *IntrinsicInst::StripPointerCasts(Value *Ptr) { Value *IntrinsicInst::StripPointerCasts(Value *Ptr) {

View File

@ -1452,6 +1452,10 @@ void Verifier::VerifyIntrinsicPrototype(Intrinsic::ID ID,
F->getName().substr(Name.length()) + "'. It should be '" + F->getName().substr(Name.length()) + "'. It should be '" +
Suffix + "'", F); Suffix + "'", F);
} }
// Check parameter attributes.
Assert1(F->getParamAttrs() == Intrinsic::getParamAttrs(ID),
"Intrinsic has wrong parameter attributes!", F);
} }