From f324dc82a1eada1561bc43793e477b933f9fc7e0 Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Sat, 28 Jul 2001 17:51:21 +0000 Subject: * Make sure that the size of the type field can also control the output instruction pattern. llvm-svn: 324 --- llvm/lib/Bytecode/Writer/InstructionWriter.cpp | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'llvm/lib/Bytecode/Writer/InstructionWriter.cpp') diff --git a/llvm/lib/Bytecode/Writer/InstructionWriter.cpp b/llvm/lib/Bytecode/Writer/InstructionWriter.cpp index 18140772a39..3ab882fa7b9 100644 --- a/llvm/lib/Bytecode/Writer/InstructionWriter.cpp +++ b/llvm/lib/Bytecode/Writer/InstructionWriter.cpp @@ -187,6 +187,7 @@ bool BytecodeWriter::processInstruction(const Instruction *I) { break; case Instruction::Store: Ty = I->getOperand(1)->getType(); // Encode the pointer type... + assert(Ty->isPointerType() && "Store to nonpointer type!?!?"); break; default: // Otherwise use the default behavior... Ty = NumOperands ? I->getOperand(0)->getType() : I->getType(); @@ -198,6 +199,11 @@ bool BytecodeWriter::processInstruction(const Instruction *I) { assert(Slot != -1 && "Type not available!!?!"); Type = (unsigned)Slot; + // Make sure that we take the type number into consideration. We don't want + // to overflow the field size for the instruction format we select. + // + if (Slot > MaxOpSlot) MaxOpSlot = Slot; + // Handle the special case for cast... if (I->getOpcode() == Instruction::Cast) { // Cast has to encode the destination type as the second argument in the -- cgit v1.2.3