Make sure that the landingpad instruction takes a Constant* as the clause's value.
authorBill Wendling <isanbard@gmail.com>
Thu, 28 Jul 2011 02:27:12 +0000 (02:27 +0000)
committerBill Wendling <isanbard@gmail.com>
Thu, 28 Jul 2011 02:27:12 +0000 (02:27 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@136326 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/Instructions.h
lib/AsmParser/LLParser.cpp
lib/Bitcode/Reader/BitcodeReader.cpp
lib/VMCore/Core.cpp
lib/VMCore/Instructions.cpp

index 82d58162f68b5947002a380bcb59740b56dd5129..f520310529bd988d4d6ed8ab8fe08d4021caff0b 100644 (file)
@@ -1852,7 +1852,7 @@ public:
   void setCleanup(bool Val) { IsCleanup = Val; }
 
   /// addClause - Add a clause to the landing pad.
-  void addClause(ClauseType CT, Value *ClauseVal);
+  void addClause(ClauseType CT, Constant *ClauseVal);
 
   /// getClauseType - Return the type of the clause at this index. The two
   /// supported clauses are Catch and Filter.
@@ -1862,9 +1862,9 @@ public:
   }
 
   /// getClauseValue - Return the value of the clause at this index.
-  Value *getClauseValue(unsigned I) const {
+  Constant *getClauseValue(unsigned I) const {
     assert(I + 1 < getNumOperands() && "Index too large!");
-    return OperandList[I + 1];
+    return cast<Constant>(OperandList[I + 1]);
   }
 
   /// getNumClauses - Get the number of clauses for this landing pad.
index 547abfe24e783cb7f91420dfd62dc50159da7bcd..b3f4d476a24d17d6e852fae13a3f731c3ee7dde5 100644 (file)
@@ -3528,7 +3528,7 @@ bool LLParser::ParseLandingPad(Instruction *&Inst, PerFunctionState &PFS) {
 
   bool IsCleanup = EatIfPresent(lltok::kw_cleanup);
 
-  SmallVector<std::pair<LandingPadInst::ClauseType, Value*>, 16> Clauses;
+  SmallVector<std::pair<LandingPadInst::ClauseType, Constant*>, 16> Clauses;
   while (Lex.getKind() == lltok::kw_catch || Lex.getKind() == lltok::kw_filter){
     LandingPadInst::ClauseType CT;
     if (Lex.getKind() == lltok::kw_catch) {
@@ -3543,14 +3543,15 @@ bool LLParser::ParseLandingPad(Instruction *&Inst, PerFunctionState &PFS) {
       Value *V; LocTy VLoc;
       if (ParseTypeAndValue(V, VLoc, PFS))
         return true;
-      Clauses.push_back(std::make_pair(CT, V));
+      Clauses.push_back(std::make_pair(CT, cast<Constant>(V)));
     } while (EatIfPresent(lltok::comma));
   }
 
   LandingPadInst *LP = LandingPadInst::Create(Ty, PersFn, Clauses.size());
   LP->setCleanup(IsCleanup);
 
-  for (SmallVectorImpl<std::pair<LandingPadInst::ClauseType, Value*> >::iterator
+  for (SmallVectorImpl<std::pair<LandingPadInst::ClauseType,
+                                 Constant*> >::iterator
          I = Clauses.begin(), E = Clauses.end(); I != E; ++I)
     LP->addClause(I->first, I->second);
 
index 37cc7949afe3be4cd8d3c48a552b7e654f42f88a..4b83958e784e9c6d99c927b4c04ef462026233da 100644 (file)
@@ -2550,7 +2550,7 @@ bool BitcodeReader::ParseFunctionBody(Function *F) {
           return Error("Invalid LANDINGPAD record");
         }
 
-        LP->addClause(CT, Val);
+        LP->addClause(CT, cast<Constant>(Val));
       }
 
       I = LP;
index 6664afc18825ecbf9776bbd749d08bd15bdc5540..5e93c73a344d40ed26999c85ae03605323b4126a 100644 (file)
@@ -1715,7 +1715,7 @@ void LLVMAddClause(LLVMValueRef LandingPad, LLVMLandingPadClauseTy ClauseTy,
                    LLVMValueRef ClauseVal) {
   unwrap<LandingPadInst>(LandingPad)->
     addClause(static_cast<LandingPadInst::ClauseType>(ClauseTy),
-              unwrap(ClauseVal));
+              cast<Constant>(unwrap(ClauseVal)));
 }
 
 void LLVMSetCleanup(LLVMValueRef LandingPad, LLVMBool Val) {
index 9398c7f872c8e8a51dcd3b6db9ae5aec350de1ba..968a565197c7a20e60ba010a3f0372f786789897 100644 (file)
@@ -228,14 +228,14 @@ void LandingPadInst::reserveClauses(unsigned Size) {
   Use::zap(OldOps, OldOps + e, true);
 }
 
-void LandingPadInst::addClause(ClauseType CT, Value *ClauseVal) {
+void LandingPadInst::addClause(ClauseType CT, Constant *ClauseVal) {
   unsigned OpNo = getNumOperands();
   if (OpNo + 1 > ReservedSpace)
     growOperands();
   assert(OpNo < ReservedSpace && "Growing didn't work!");
   ClauseIdxs.push_back(CT);
   ++NumOperands;
-  OperandList[OpNo] = ClauseVal;
+  OperandList[OpNo] = (Value*)ClauseVal;
 }
 
 //===----------------------------------------------------------------------===//