diff options
author | Chris Lattner <sabre@nondot.org> | 2003-06-17 13:31:10 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2003-06-17 13:31:10 +0000 |
commit | eaeaad614c3ec1646cddc42430b65b08971bf2bc (patch) | |
tree | 3b32631fe12730fb62fcfac52e744bae01585d66 /lib/Bytecode/Reader | |
parent | 634a28f999db0d07db34ac061c65181b259101f2 (diff) |
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
Diffstat (limited to 'lib/Bytecode/Reader')
-rw-r--r-- | lib/Bytecode/Reader/InstructionReader.cpp | 24 |
1 files changed, 14 insertions, 10 deletions
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<BasicBlock>(getValue(Type::LabelTy, Raw.Arg2)); - Except = cast<BasicBlock>(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<BasicBlock>(getValue(Type::LabelTy, Raw.Arg3)); + else { + Except = cast<BasicBlock>(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; } |