Make ReturnInst accept a value of type void as the return value. The

ReturnInst constructed is the same as if NULL was passed instead of
the void value.

llvm-svn: 17923
This commit is contained in:
Alkis Evlogimenos 2004-11-17 21:02:25 +00:00
parent f8d6f7e973
commit 531e901deb
2 changed files with 14 additions and 8 deletions

View File

@ -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);

View File

@ -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) {