From eaeaad614c3ec1646cddc42430b65b08971bf2bc Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Tue, 17 Jun 2003 13:31:10 +0000 Subject: Fix bug: Assembler/2003-06-17-InvokeDisassemble.llx "yes, invoke instructions can have just three arguments" git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@6736 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Bytecode/Reader/InstructionReader.cpp | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) (limited to 'lib/Bytecode/Reader/InstructionReader.cpp') diff --git a/lib/Bytecode/Reader/InstructionReader.cpp b/lib/Bytecode/Reader/InstructionReader.cpp index d652af7468..e81927c441 100644 --- a/lib/Bytecode/Reader/InstructionReader.cpp +++ b/lib/Bytecode/Reader/InstructionReader.cpp @@ -302,16 +302,19 @@ bool BytecodeParser::ParseInstruction(const unsigned char *&Buf, if (Raw.NumOperands < 3) return true; Normal = cast(getValue(Type::LabelTy, Raw.Arg2)); - Except = cast(getValue(Type::LabelTy, args[0])); - - FunctionType::ParamTypes::const_iterator It = PL.begin(); - for (unsigned i = 1; i < args.size(); i++) { - if (It == PL.end()) return true; - // TODO: Check getValue for null! - Params.push_back(getValue(*It++, args[i])); + if (Raw.NumOperands == 3) + Except = cast(getValue(Type::LabelTy, Raw.Arg3)); + else { + Except = cast(getValue(Type::LabelTy, args[0])); + + FunctionType::ParamTypes::const_iterator It = PL.begin(); + for (unsigned i = 1; i < args.size(); i++) { + if (It == PL.end()) return true; + // TODO: Check getValue for null! + Params.push_back(getValue(*It++, args[i])); + } + if (It != PL.end()) return true; } - - if (It != PL.end()) return true; } else { if (args.size() < 4) return true; @@ -326,7 +329,8 @@ bool BytecodeParser::ParseInstruction(const unsigned char *&Buf, } } - delete Raw.VarArgs; + if (Raw.NumOperands > 3) + delete Raw.VarArgs; Res = new InvokeInst(M, Normal, Except, Params); return false; } -- cgit v1.2.3-18-g5258