The personality function should be a Function* and not just a Value*.
authorBill Wendling <isanbard@gmail.com>
Thu, 28 Jul 2011 21:14:13 +0000 (21:14 +0000)
committerBill Wendling <isanbard@gmail.com>
Thu, 28 Jul 2011 21:14:13 +0000 (21:14 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@136392 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/Instructions.h
include/llvm/Support/IRBuilder.h
lib/AsmParser/LLParser.cpp
lib/Bitcode/Reader/BitcodeReader.cpp
lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp
lib/VMCore/Core.cpp
lib/VMCore/Instructions.cpp

index f520310529bd988d4d6ed8ab8fe08d4021caff0b..3e250d85274f92955431bf44c58e7bbe7fcccabf 100644 (file)
@@ -1806,16 +1806,16 @@ private:
     return User::operator new(s, 0);
   }
   void growOperands();
-  void init(Value *PersFn, unsigned NumReservedValues, const Twine &NameStr);
+  void init(Function *PersFn, unsigned NumReservedValues, const Twine &NameStr);
 
-  explicit LandingPadInst(Type *RetTy, Value *PersonalityFn,
+  explicit LandingPadInst(Type *RetTy, Function *PersonalityFn,
                           unsigned NumReservedValues, const Twine &NameStr,
                           Instruction *InsertBefore)
     : Instruction(RetTy, Instruction::LandingPad, 0, 0, InsertBefore),
       IsCleanup(false) {
     init(PersonalityFn, 1 + NumReservedValues, NameStr);
   }
-  explicit LandingPadInst(Type *RetTy, Value *PersonalityFn,
+  explicit LandingPadInst(Type *RetTy, Function *PersonalityFn,
                           unsigned NumReservedValues, const Twine &NameStr,
                           BasicBlock *InsertAtEnd)
     : Instruction(RetTy, Instruction::LandingPad, 0, 0, InsertAtEnd),
@@ -1825,14 +1825,14 @@ private:
 protected:
   virtual LandingPadInst *clone_impl() const;
 public:
-  static LandingPadInst *Create(Type *RetTy, Value *PersonalityFn,
+  static LandingPadInst *Create(Type *RetTy, Function *PersonalityFn,
                                 unsigned NumReservedValues,
                                 const Twine &NameStr = "",
                                 Instruction *InsertBefore = 0) {
     return new LandingPadInst(RetTy, PersonalityFn, NumReservedValues, NameStr,
                               InsertBefore);
   }
-  static LandingPadInst *Create(Type *RetTy, Value *PersonalityFn,
+  static LandingPadInst *Create(Type *RetTy, Function *PersonalityFn,
                                 unsigned NumReservedValues,
                                 const Twine &NameStr, BasicBlock *InsertAtEnd) {
     return new LandingPadInst(RetTy, PersonalityFn, NumReservedValues, NameStr,
@@ -1845,7 +1845,9 @@ public:
 
   /// getPersonalityFn - Get the personality function associated with this
   /// landing pad.
-  const Value *getPersonalityFn() const { return getOperand(0); }
+  const Function *getPersonalityFn() const {
+    return cast<Function>(getOperand(0));
+  }
 
   // Simple accessors.
   bool isCleanup() const { return IsCleanup; }
index 7f89b247c4869dd6a0ba35c93e0d9d27506a5d9e..542ee10cde3653f383563ac05491bc53b365a6a9 100644 (file)
@@ -1198,7 +1198,7 @@ public:
     return Insert(InsertValueInst::Create(Agg, Val, Idxs), Name);
   }
 
-  Value *CreateLandingPad(Type *Ty, Value *PersFn, unsigned NumClauses,
+  Value *CreateLandingPad(Type *Ty, Function *PersFn, unsigned NumClauses,
                           const Twine &Name = "") {
     return Insert(LandingPadInst::Create(Ty, PersFn, NumClauses, Name));
   }
index b3f4d476a24d17d6e852fae13a3f731c3ee7dde5..fe4bb2e6376f4cac8b98f2b7c86b2f126b6ff452 100644 (file)
@@ -3547,7 +3547,8 @@ bool LLParser::ParseLandingPad(Instruction *&Inst, PerFunctionState &PFS) {
     } while (EatIfPresent(lltok::comma));
   }
 
-  LandingPadInst *LP = LandingPadInst::Create(Ty, PersFn, Clauses.size());
+  LandingPadInst *LP = LandingPadInst::Create(Ty, cast<Function>(PersFn),
+                                              Clauses.size());
   LP->setCleanup(IsCleanup);
 
   for (SmallVectorImpl<std::pair<LandingPadInst::ClauseType,
index 4b83958e784e9c6d99c927b4c04ef462026233da..bab33ed25765706ec525b357924e06fea6e3b595 100644 (file)
@@ -2539,7 +2539,8 @@ bool BitcodeReader::ParseFunctionBody(Function *F) {
 
       bool IsCleanup = !!Record[Idx++];
       unsigned NumClauses = Record[Idx++];
-      LandingPadInst *LP = LandingPadInst::Create(Ty, PersFn, NumClauses);
+      LandingPadInst *LP = LandingPadInst::Create(Ty, cast<Function>(PersFn),
+                                                  NumClauses);
       LP->setCleanup(IsCleanup);
       for (unsigned J = 0; J != NumClauses; ++J) {
         LandingPadInst::ClauseType CT =
index 67707c6425e3fe8d1d3dece76c7204d1096b6e00..c5c97904568177a8cc4d53ec41ba9141c8ad5e1a 100644 (file)
@@ -914,10 +914,6 @@ void SelectionDAGBuilder::visitPHI(const PHINode &) {
   llvm_unreachable("SelectionDAGBuilder shouldn't visit PHI nodes!");
 }
 
-void SelectionDAGBuilder::visitLandingPad(const LandingPadInst &) {
-  // FIXME: Handle this
-}
-
 void SelectionDAGBuilder::visit(unsigned Opcode, const User &I) {
   // Note: this doesn't use InstVisitor, because it has to work with
   // ConstantExpr's in addition to instructions.
@@ -1813,7 +1809,13 @@ void SelectionDAGBuilder::visitUnwind(const UnwindInst &I) {
 }
 
 void SelectionDAGBuilder::visitResume(const ResumeInst &RI) {
+  llvm_unreachable("SelectionDAGBuilder shouldn't visit resume instructions!");
+}
+
+void SelectionDAGBuilder::visitLandingPad(const LandingPadInst &) {
   // FIXME: Handle this
+  assert(FuncInfo.MBB->isLandingPad() &&
+         "Call to landingpad not in landing pad!");
 }
 
 /// handleSmallSwitchCaseRange - Emit a series of specific tests (suitable for
index 5e93c73a344d40ed26999c85ae03605323b4126a..318805b9159ac48554965d612a7b301ae03d563d 100644 (file)
@@ -1686,7 +1686,8 @@ LLVMValueRef LLVMBuildInvoke(LLVMBuilderRef B, LLVMValueRef Fn,
 LLVMValueRef LLVMBuildLandingPad(LLVMBuilderRef B, LLVMTypeRef Ty,
                                  LLVMValueRef PersFn, unsigned NumClauses,
                                  const char *Name) {
-  return wrap(unwrap(B)->CreateLandingPad(unwrap(Ty), unwrap(PersFn),
+  return wrap(unwrap(B)->CreateLandingPad(unwrap(Ty),
+                                          cast<Function>(unwrap(PersFn)),
                                           NumClauses, Name));
 }
 
index c980a7189a3a05031226f795fa6b47e34f11d95a..9fdff0773a64f4adc0faaf8f84c7a7b4db311072 100644 (file)
@@ -170,12 +170,12 @@ Value *PHINode::hasConstantValue() const {
 //                       LandingPadInst Implementation
 //===----------------------------------------------------------------------===//
 
-void LandingPadInst::init(Value *PersFn, unsigned NumReservedValues,
+void LandingPadInst::init(Function *PersFn, unsigned NumReservedValues,
                           const Twine &NameStr) {
   ReservedSpace = NumReservedValues;
   NumOperands = 1;
   OperandList = allocHungoffUses(ReservedSpace);
-  OperandList[0] = PersFn;
+  OperandList[0] = (Value*)PersFn;
   setName(NameStr);
 }