diff options
author | Duncan Sands <baldrick@free.fr> | 2008-04-07 13:39:11 +0000 |
---|---|---|
committer | Duncan Sands <baldrick@free.fr> | 2008-04-07 13:39:11 +0000 |
commit | 79ab3e801480e6412c064a3fb15a79a8cab13efc (patch) | |
tree | ec8a5ad151a0fabb4238ccccf71c13fbe302911b /lib | |
parent | dc1adac582fa120861f18ae7221bfe1421fea59f (diff) | |
download | external_llvm-79ab3e801480e6412c064a3fb15a79a8cab13efc.zip external_llvm-79ab3e801480e6412c064a3fb15a79a8cab13efc.tar.gz external_llvm-79ab3e801480e6412c064a3fb15a79a8cab13efc.tar.bz2 |
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
Diffstat (limited to 'lib')
-rw-r--r-- | lib/VMCore/Function.cpp | 8 | ||||
-rw-r--r-- | lib/VMCore/Verifier.cpp | 4 |
2 files changed, 9 insertions, 3 deletions
diff --git a/lib/VMCore/Function.cpp b/lib/VMCore/Function.cpp index 302eff3..6571f10 100644 --- a/lib/VMCore/Function.cpp +++ b/lib/VMCore/Function.cpp @@ -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) { diff --git a/lib/VMCore/Verifier.cpp b/lib/VMCore/Verifier.cpp index 7ec0cf3..5b8aa76 100644 --- a/lib/VMCore/Verifier.cpp +++ b/lib/VMCore/Verifier.cpp @@ -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); } |