[X86] Fix a dangling StringRef issue introduced in r358029.

I was attempting to convert mnemonics to lower case after processing a pseudo prefix. But the ParseOperands just hold a StringRef for tokens so there is no where to allocate the memory.

Add FIXMEs for the lower case issue which also exists in the prefix parsing code.

llvm-svn: 358036
This commit is contained in:
Craig Topper 2019-04-09 21:37:21 +00:00
parent 9bf092d719
commit 60f83544bb
1 changed files with 4 additions and 3 deletions

View File

@ -2310,7 +2310,6 @@ bool X86AsmParser::ParseInstruction(ParseInstructionInfo &Info, StringRef Name,
SMLoc NameLoc, OperandVector &Operands) { SMLoc NameLoc, OperandVector &Operands) {
MCAsmParser &Parser = getParser(); MCAsmParser &Parser = getParser();
InstInfo = &Info; InstInfo = &Info;
std::string TempName; // Used when we parse a pseudo prefix.
// Reset the forced VEX encoding. // Reset the forced VEX encoding.
ForcedVEXEncoding = VEXEncoding_Default; ForcedVEXEncoding = VEXEncoding_Default;
@ -2342,8 +2341,8 @@ bool X86AsmParser::ParseInstruction(ParseInstructionInfo &Info, StringRef Name,
} else { } else {
if (getLexer().isNot(AsmToken::Identifier)) if (getLexer().isNot(AsmToken::Identifier))
return Error(Parser.getTok().getLoc(), "Expected identifier"); return Error(Parser.getTok().getLoc(), "Expected identifier");
TempName = Parser.getTok().getString().lower(); // FIXME: The mnemonic won't match correctly if its not in lower case.
Name = TempName; Name = Parser.getTok().getString();
Parser.Lex(); Parser.Lex();
} }
continue; continue;
@ -2545,6 +2544,7 @@ bool X86AsmParser::ParseInstruction(ParseInstructionInfo &Info, StringRef Name,
Flags = X86::IP_NO_PREFIX; Flags = X86::IP_NO_PREFIX;
break; break;
} }
// FIXME: The mnemonic won't match correctly if its not in lower case.
Name = Parser.getTok().getString(); Name = Parser.getTok().getString();
Parser.Lex(); // eat the prefix Parser.Lex(); // eat the prefix
// Hack: we could have something like "rep # some comment" or // Hack: we could have something like "rep # some comment" or
@ -2552,6 +2552,7 @@ bool X86AsmParser::ParseInstruction(ParseInstructionInfo &Info, StringRef Name,
while (Name.startswith(";") || Name.startswith("\n") || while (Name.startswith(";") || Name.startswith("\n") ||
Name.startswith("#") || Name.startswith("\t") || Name.startswith("#") || Name.startswith("\t") ||
Name.startswith("/")) { Name.startswith("/")) {
// FIXME: The mnemonic won't match correctly if its not in lower case.
Name = Parser.getTok().getString(); Name = Parser.getTok().getString();
Parser.Lex(); // go to next prefix or instr Parser.Lex(); // go to next prefix or instr
} }