Make sure that intrinsics automagically get the
authorDuncan Sands <baldrick@free.fr>
Mon, 7 Apr 2008 13:39:11 +0000 (13:39 +0000)
committerDuncan Sands <baldrick@free.fr>
Mon, 7 Apr 2008 13:39:11 +0000 (13:39 +0000)
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

lib/VMCore/Function.cpp
lib/VMCore/Verifier.cpp

index 302eff30ff3f2cb01ee86132925ad2d0163da5cc..6571f10be5dadd053c91050f756091d3d53bc64b 100644 (file)
@@ -160,6 +160,10 @@ Function::Function(const FunctionType *Ty, LinkageTypes Linkage,
 
   if (ParentModule)
     ParentModule->getFunctionList().push_back(this);
 
   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() {
 }
 
 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.
                                     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)));
     cast<Function>(M->getOrInsertFunction(getName(id, Tys, numTys),
                                           getType(id, Tys, numTys)));
-  F->setParamAttrs(getParamAttrs(id));
-  return F;
 }
 
 Value *IntrinsicInst::StripPointerCasts(Value *Ptr) {
 }
 
 Value *IntrinsicInst::StripPointerCasts(Value *Ptr) {
index 7ec0cf3a4582c7330fc2006289aa5d6d48fc76a5..5b8aa7691beca7055033d1757574e2a72c35d67d 100644 (file)
@@ -1452,6 +1452,10 @@ void Verifier::VerifyIntrinsicPrototype(Intrinsic::ID ID,
                   F->getName().substr(Name.length()) + "'. It should be '" +
                   Suffix + "'", F);
   }
                   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);
 }
 
 
 }