aboutsummaryrefslogtreecommitdiff
path: root/lib/VMCore
diff options
context:
space:
mode:
Diffstat (limited to 'lib/VMCore')
-rw-r--r--lib/VMCore/AsmWriter.cpp9
-rw-r--r--lib/VMCore/Instruction.cpp3
-rw-r--r--lib/VMCore/Verifier.cpp8
3 files changed, 15 insertions, 5 deletions
diff --git a/lib/VMCore/AsmWriter.cpp b/lib/VMCore/AsmWriter.cpp
index c060a8df20..28f26c833a 100644
--- a/lib/VMCore/AsmWriter.cpp
+++ b/lib/VMCore/AsmWriter.cpp
@@ -3,8 +3,7 @@
// This library implements the functionality defined in llvm/Assembly/Writer.h
//
// Note that these routines must be extremely tolerant of various errors in the
-// LLVM code, because of of the primary uses of it is for debugging
-// transformations.
+// LLVM code, because it can be used for debugging transformations.
//
//===----------------------------------------------------------------------===//
@@ -814,9 +813,13 @@ void AssemblyWriter::printInstruction(const Instruction &I) {
writeOperand(AI->getArraySize(), true);
}
} else if (isa<CastInst>(I)) {
- if (Operand) writeOperand(Operand, true);
+ writeOperand(Operand, true);
Out << " to ";
printType(I.getType());
+ } else if (isa<VarArgInst>(I)) {
+ writeOperand(Operand, true);
+ Out << ", ";
+ printType(I.getType());
} else if (Operand) { // Print the normal way...
// PrintAllTypes - Instructions who have operands of all the same type
diff --git a/lib/VMCore/Instruction.cpp b/lib/VMCore/Instruction.cpp
index 01381faed6..ce1423a863 100644
--- a/lib/VMCore/Instruction.cpp
+++ b/lib/VMCore/Instruction.cpp
@@ -91,7 +91,8 @@ const char *Instruction::getOpcodeName(unsigned OpCode) {
case Call: return "call";
case Shl: return "shl";
case Shr: return "shr";
-
+ case VarArg: return "va_arg";
+
default: return "<Invalid operator> ";
}
diff --git a/lib/VMCore/Verifier.cpp b/lib/VMCore/Verifier.cpp
index f7bcf5044d..66ee9de4c1 100644
--- a/lib/VMCore/Verifier.cpp
+++ b/lib/VMCore/Verifier.cpp
@@ -130,6 +130,7 @@ namespace { // Anonymous namespace for class
void visitPHINode(PHINode &PN);
void visitBinaryOperator(BinaryOperator &B);
void visitShiftInst(ShiftInst &SI);
+ void visitVarArgInst(VarArgInst &VAI);
void visitCallInst(CallInst &CI);
void visitGetElementPtrInst(GetElementPtrInst &GEP);
void visitLoadInst(LoadInst &LI);
@@ -402,7 +403,12 @@ void Verifier::visitShiftInst(ShiftInst &SI) {
visitInstruction(SI);
}
-
+void Verifier::visitVarArgInst(VarArgInst &VAI) {
+ Assert1(VAI.getParent()->getParent()->getFunctionType()->isVarArg(),
+ "va_arg instruction may only occur in function with variable args!",
+ &VAI);
+ visitInstruction(VAI);
+}
void Verifier::visitGetElementPtrInst(GetElementPtrInst &GEP) {
const Type *ElTy =