From f82edaffb1a6d41bc89d86c69f53962e63621aad Mon Sep 17 00:00:00 2001 From: Benjamin Kramer Date: Sun, 16 Oct 2011 11:28:29 +0000 Subject: [PATCH] X86AsmParser: Synthesize EndLoc for tokens out of StartLoc + Length and print ranges for invalid operands. :1:4: error: invalid instruction mnemonic 'abc' abc incl %edi ^~~ git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@142135 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Target/X86/AsmParser/X86AsmParser.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/lib/Target/X86/AsmParser/X86AsmParser.cpp b/lib/Target/X86/AsmParser/X86AsmParser.cpp index eda180e7348..42512a7c50d 100644 --- a/lib/Target/X86/AsmParser/X86AsmParser.cpp +++ b/lib/Target/X86/AsmParser/X86AsmParser.cpp @@ -322,7 +322,8 @@ struct X86Operand : public MCParsedAsmOperand { } static X86Operand *CreateToken(StringRef Str, SMLoc Loc) { - X86Operand *Res = new X86Operand(Token, Loc, Loc); + SMLoc EndLoc = SMLoc::getFromPointer(Loc.getPointer() + Str.size() - 1); + X86Operand *Res = new X86Operand(Token, Loc, EndLoc); Res->Tok.Data = Str.data(); Res->Tok.Length = Str.size(); return Res; @@ -1083,8 +1084,8 @@ MatchAndEmitInstruction(SMLoc IDLoc, if ((Match1 == Match_MnemonicFail) && (Match2 == Match_MnemonicFail) && (Match3 == Match_MnemonicFail) && (Match4 == Match_MnemonicFail)) { if (!WasOriginallyInvalidOperand) { - Error(IDLoc, "invalid instruction mnemonic '" + Base + "'"); - return true; + return Error(IDLoc, "invalid instruction mnemonic '" + Base + "'", + Op->getLocRange()); } // Recover location info for the operand if we know which was the problem. -- 2.34.1