diff options
| -rw-r--r-- | llvm/include/llvm/Instructions.h | 13 | ||||
| -rw-r--r-- | llvm/lib/VMCore/Instructions.cpp | 9 | 
2 files changed, 14 insertions, 8 deletions
diff --git a/llvm/include/llvm/Instructions.h b/llvm/include/llvm/Instructions.h index 714f7d7fb6e..b52ebd9acaa 100644 --- a/llvm/include/llvm/Instructions.h +++ b/llvm/include/llvm/Instructions.h @@ -807,23 +807,20 @@ class ReturnInst : public TerminatorInst {      }    } -  void init(Value *RetVal) { -    if (RetVal) { -      assert(!isa<BasicBlock>(RetVal) &&  -             "Cannot return basic block.  Probably using the incorrect ctor"); -      Operands.reserve(1); -      Operands.push_back(Use(RetVal, this)); -    } -  } +  void init(Value *RetVal);  public:    // ReturnInst constructors:    // ReturnInst()                  - 'ret void' instruction +  // ReturnInst(    null)          - 'ret void' instruction    // ReturnInst(Value* X)          - 'ret X'    instruction    // ReturnInst(    null, Inst *)  - 'ret void' instruction, insert before I    // ReturnInst(Value* X, Inst *I) - 'ret X'    instruction, insert before I    // ReturnInst(    null, BB *B)   - 'ret void' instruction, insert @ end of BB    // ReturnInst(Value* X, BB *B)   - 'ret X'    instruction, insert @ end of BB +  // +  // NOTE: If the Value* passed is of type void then the constructor behaves as +  // if it was passed NULL.    ReturnInst(Value *RetVal = 0, Instruction *InsertBefore = 0)      : TerminatorInst(Instruction::Ret, InsertBefore) {      init(RetVal); diff --git a/llvm/lib/VMCore/Instructions.cpp b/llvm/lib/VMCore/Instructions.cpp index 029ee6a0f6b..44167cbae71 100644 --- a/llvm/lib/VMCore/Instructions.cpp +++ b/llvm/lib/VMCore/Instructions.cpp @@ -233,6 +233,15 @@ Function *CallSite::getCalledFunction() const {  //                        ReturnInst Implementation  //===----------------------------------------------------------------------===// +void ReturnInst::init(Value* RetVal) { +  if (RetVal && RetVal->getType() != Type::VoidTy) { +    assert(!isa<BasicBlock>(RetVal) &&  +           "Cannot return basic block.  Probably using the incorrect ctor"); +    Operands.reserve(1); +    Operands.push_back(Use(RetVal, this)); +  } +} +  // Out-of-line ReturnInst method, put here so the C++ compiler can choose to  // emit the vtable for the class in this translation unit.  void ReturnInst::setSuccessor(unsigned idx, BasicBlock *NewSucc) {  | 

