mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-10-19 02:52:53 +02:00
X86Parser: Fix potential reference to deleted object
Within the MatchFPUWaitAlias function, Operands[0] is potentially overwritten leading to &Op referencing a deleted object. To fix this, assign the reference after the function. Differential Revision: https://reviews.llvm.org/D57376 llvm-svn: 356973
This commit is contained in:
parent
189f436b89
commit
48752c1044
@ -2949,13 +2949,13 @@ bool X86AsmParser::MatchAndEmitATTInstruction(SMLoc IDLoc, unsigned &Opcode,
|
||||
uint64_t &ErrorInfo,
|
||||
bool MatchingInlineAsm) {
|
||||
assert(!Operands.empty() && "Unexpect empty operand list!");
|
||||
X86Operand &Op = static_cast<X86Operand &>(*Operands[0]);
|
||||
assert(Op.isToken() && "Leading operand should always be a mnemonic!");
|
||||
assert((*Operands[0]).isToken() && "Leading operand should always be a mnemonic!");
|
||||
SMRange EmptyRange = None;
|
||||
|
||||
// First, handle aliases that expand to multiple instructions.
|
||||
MatchFPUWaitAlias(IDLoc, Op, Operands, Out, MatchingInlineAsm);
|
||||
|
||||
MatchFPUWaitAlias(IDLoc, static_cast<X86Operand &>(*Operands[0]), Operands,
|
||||
Out, MatchingInlineAsm);
|
||||
X86Operand &Op = static_cast<X86Operand &>(*Operands[0]);
|
||||
bool WasOriginallyInvalidOperand = false;
|
||||
unsigned Prefixes = getPrefixes(Operands);
|
||||
|
||||
@ -3132,15 +3132,15 @@ bool X86AsmParser::MatchAndEmitIntelInstruction(SMLoc IDLoc, unsigned &Opcode,
|
||||
uint64_t &ErrorInfo,
|
||||
bool MatchingInlineAsm) {
|
||||
assert(!Operands.empty() && "Unexpect empty operand list!");
|
||||
X86Operand &Op = static_cast<X86Operand &>(*Operands[0]);
|
||||
assert(Op.isToken() && "Leading operand should always be a mnemonic!");
|
||||
StringRef Mnemonic = Op.getToken();
|
||||
assert((*Operands[0]).isToken() && "Leading operand should always be a mnemonic!");
|
||||
StringRef Mnemonic = (static_cast<X86Operand &>(*Operands[0])).getToken();
|
||||
SMRange EmptyRange = None;
|
||||
StringRef Base = Op.getToken();
|
||||
StringRef Base = (static_cast<X86Operand &>(*Operands[0])).getToken();
|
||||
unsigned Prefixes = getPrefixes(Operands);
|
||||
|
||||
// First, handle aliases that expand to multiple instructions.
|
||||
MatchFPUWaitAlias(IDLoc, Op, Operands, Out, MatchingInlineAsm);
|
||||
MatchFPUWaitAlias(IDLoc, static_cast<X86Operand &>(*Operands[0]), Operands, Out, MatchingInlineAsm);
|
||||
X86Operand &Op = static_cast<X86Operand &>(*Operands[0]);
|
||||
|
||||
MCInst Inst;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user