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/VMCore/Function.cpp | |
parent | dc1adac582fa120861f18ae7221bfe1421fea59f (diff) |
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/VMCore/Function.cpp')
-rw-r--r-- | lib/VMCore/Function.cpp | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/lib/VMCore/Function.cpp b/lib/VMCore/Function.cpp index 302eff30ff..6571f10be5 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) { |