[llvm-commits] [llvm] r49335 - in /llvm/trunk/lib/VMCore: Function.cpp Verifier.cpp

Duncan Sands baldrick at free.fr
Mon Apr 7 06:39:14 PDT 2008


Author: baldrick
Date: Mon Apr  7 08:39:11 2008
New Revision: 49335

URL: http://llvm.org/viewvc/llvm-project?rev=49335&view=rev
Log:
Make sure that intrinsics automagically get the
right parameter attributes no matter how they
are obtained.

Modified:
    llvm/trunk/lib/VMCore/Function.cpp
    llvm/trunk/lib/VMCore/Verifier.cpp

Modified: llvm/trunk/lib/VMCore/Function.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/VMCore/Function.cpp?rev=49335&r1=49334&r2=49335&view=diff

==============================================================================
--- llvm/trunk/lib/VMCore/Function.cpp (original)
+++ llvm/trunk/lib/VMCore/Function.cpp Mon Apr  7 08:39:11 2008
@@ -160,6 +160,10 @@
 
   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 @@
                                     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) {

Modified: llvm/trunk/lib/VMCore/Verifier.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/VMCore/Verifier.cpp?rev=49335&r1=49334&r2=49335&view=diff

==============================================================================
--- llvm/trunk/lib/VMCore/Verifier.cpp (original)
+++ llvm/trunk/lib/VMCore/Verifier.cpp Mon Apr  7 08:39:11 2008
@@ -1452,6 +1452,10 @@
                   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);
 }
 
 





More information about the llvm-commits mailing list