mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-04-13 15:37:24 +00:00
fix a crash on invalid metadata, e.g.: call i32 @foo(), XXXX
We would return the error without inserting the new instruction into the program, so it wouldn't get deallocated, and an abort would trigger when the module was deleted. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@100602 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
d49baefaad
commit
4ba9d9b67b
@ -2933,6 +2933,8 @@ bool LLParser::ParseBasicBlock(PerFunctionState &PFS) {
|
||||
default: assert(0 && "Unknown ParseInstruction result!");
|
||||
case InstError: return true;
|
||||
case InstNormal:
|
||||
BB->getInstList().push_back(Inst);
|
||||
|
||||
// With a normal result, we check to see if the instruction is followed by
|
||||
// a comma and metadata.
|
||||
if (EatIfPresent(lltok::comma))
|
||||
@ -2940,6 +2942,8 @@ bool LLParser::ParseBasicBlock(PerFunctionState &PFS) {
|
||||
return true;
|
||||
break;
|
||||
case InstExtraComma:
|
||||
BB->getInstList().push_back(Inst);
|
||||
|
||||
// If the instruction parser ate an extra comma at the end of it, it
|
||||
// *must* be followed by metadata.
|
||||
if (ParseInstructionMetadata(Inst))
|
||||
@ -2947,8 +2951,6 @@ bool LLParser::ParseBasicBlock(PerFunctionState &PFS) {
|
||||
break;
|
||||
}
|
||||
|
||||
BB->getInstList().push_back(Inst);
|
||||
|
||||
// Set the name on the instruction.
|
||||
if (PFS.SetInstName(NameID, NameStr, NameLoc, Inst)) return true;
|
||||
} while (!isa<TerminatorInst>(Inst));
|
||||
|
@ -74,7 +74,7 @@ namespace llvm {
|
||||
public:
|
||||
typedef LLLexer::LocTy LocTy;
|
||||
private:
|
||||
LLVMContext& Context;
|
||||
LLVMContext &Context;
|
||||
LLLexer Lex;
|
||||
Module *M;
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user