diff options
-rw-r--r-- | lib/Linker/LinkModules.cpp | 2 | ||||
-rw-r--r-- | lib/VMCore/AsmWriter.cpp | 3 | ||||
-rw-r--r-- | lib/VMCore/Instruction.cpp | 1 | ||||
-rw-r--r-- | lib/VMCore/Instructions.cpp | 9 | ||||
-rw-r--r-- | lib/VMCore/Linker.cpp | 2 |
5 files changed, 15 insertions, 2 deletions
diff --git a/lib/Linker/LinkModules.cpp b/lib/Linker/LinkModules.cpp index 70bd22cd44..fbf09781ba 100644 --- a/lib/Linker/LinkModules.cpp +++ b/lib/Linker/LinkModules.cpp @@ -310,7 +310,7 @@ static Value *RemapOperand(const Value *In, Operands[i] = cast<Constant>(RemapOperand(CPS->getOperand(i), LocalMap, GlobalMap)); Result = ConstantStruct::get(cast<StructType>(CPS->getType()), Operands); - } else if (isa<ConstantPointerNull>(CPV)) { + } else if (isa<ConstantPointerNull>(CPV) || isa<UndefValue>(CPV)) { Result = const_cast<Constant*>(CPV); } else if (isa<GlobalValue>(CPV)) { Result = cast<Constant>(RemapOperand(CPV, LocalMap, GlobalMap)); diff --git a/lib/VMCore/AsmWriter.cpp b/lib/VMCore/AsmWriter.cpp index 236e243caa..2e973feb16 100644 --- a/lib/VMCore/AsmWriter.cpp +++ b/lib/VMCore/AsmWriter.cpp @@ -518,6 +518,9 @@ static void WriteConstantInt(std::ostream &Out, const Constant *CV, } else if (isa<ConstantPointerNull>(CV)) { Out << "null"; + } else if (isa<UndefValue>(CV)) { + Out << "undef"; + } else if (const ConstantExpr *CE = dyn_cast<ConstantExpr>(CV)) { Out << CE->getOpcodeName() << " ("; diff --git a/lib/VMCore/Instruction.cpp b/lib/VMCore/Instruction.cpp index 4ea5775330..17970ac9ba 100644 --- a/lib/VMCore/Instruction.cpp +++ b/lib/VMCore/Instruction.cpp @@ -88,6 +88,7 @@ const char *Instruction::getOpcodeName(unsigned OpCode) { case Switch: return "switch"; case Invoke: return "invoke"; case Unwind: return "unwind"; + case Unreachable: return "unreachable"; // Standard binary operators... case Add: return "add"; diff --git a/lib/VMCore/Instructions.cpp b/lib/VMCore/Instructions.cpp index 38e9255a9b..029ee6a0f6 100644 --- a/lib/VMCore/Instructions.cpp +++ b/lib/VMCore/Instructions.cpp @@ -249,6 +249,14 @@ void UnwindInst::setSuccessor(unsigned idx, BasicBlock *NewSucc) { } //===----------------------------------------------------------------------===// +// UnreachableInst Implementation +//===----------------------------------------------------------------------===// + +void UnreachableInst::setSuccessor(unsigned idx, BasicBlock *NewSucc) { + assert(0 && "UnreachableInst has no successors!"); +} + +//===----------------------------------------------------------------------===// // BranchInst Implementation //===----------------------------------------------------------------------===// @@ -832,3 +840,4 @@ BranchInst *BranchInst::clone() const { return new BranchInst(*this); } SwitchInst *SwitchInst::clone() const { return new SwitchInst(*this); } InvokeInst *InvokeInst::clone() const { return new InvokeInst(*this); } UnwindInst *UnwindInst::clone() const { return new UnwindInst(); } +UnreachableInst *UnreachableInst::clone() const { return new UnreachableInst();} diff --git a/lib/VMCore/Linker.cpp b/lib/VMCore/Linker.cpp index 70bd22cd44..fbf09781ba 100644 --- a/lib/VMCore/Linker.cpp +++ b/lib/VMCore/Linker.cpp @@ -310,7 +310,7 @@ static Value *RemapOperand(const Value *In, Operands[i] = cast<Constant>(RemapOperand(CPS->getOperand(i), LocalMap, GlobalMap)); Result = ConstantStruct::get(cast<StructType>(CPS->getType()), Operands); - } else if (isa<ConstantPointerNull>(CPV)) { + } else if (isa<ConstantPointerNull>(CPV) || isa<UndefValue>(CPV)) { Result = const_cast<Constant*>(CPV); } else if (isa<GlobalValue>(CPV)) { Result = cast<Constant>(RemapOperand(CPV, LocalMap, GlobalMap)); |