summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Target/X86/AsmParser/X86AsmParser.cpp
diff options
context:
space:
mode:
authorBenjamin Kramer <benny.kra@googlemail.com>2011-10-16 11:28:29 +0000
committerBenjamin Kramer <benny.kra@googlemail.com>2011-10-16 11:28:29 +0000
commitd416bae5f26dbe02c7b60bdc97c6ed5f0c622152 (patch)
tree490b50594430944e20746bb78674f0fde5557e78 /llvm/lib/Target/X86/AsmParser/X86AsmParser.cpp
parent5f9a44f3e92db248ac357d6e908311fe490a6f64 (diff)
downloadbcm5719-llvm-d416bae5f26dbe02c7b60bdc97c6ed5f0c622152.tar.gz
bcm5719-llvm-d416bae5f26dbe02c7b60bdc97c6ed5f0c622152.zip
X86AsmParser: Synthesize EndLoc for tokens out of StartLoc + Length and print ranges for invalid operands.
<stdin>:1:4: error: invalid instruction mnemonic 'abc' abc incl %edi ^~~ llvm-svn: 142135
Diffstat (limited to 'llvm/lib/Target/X86/AsmParser/X86AsmParser.cpp')
-rw-r--r--llvm/lib/Target/X86/AsmParser/X86AsmParser.cpp7
1 files changed, 4 insertions, 3 deletions
diff --git a/llvm/lib/Target/X86/AsmParser/X86AsmParser.cpp b/llvm/lib/Target/X86/AsmParser/X86AsmParser.cpp
index eda180e7348..42512a7c50d 100644
--- a/llvm/lib/Target/X86/AsmParser/X86AsmParser.cpp
+++ b/llvm/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.
OpenPOWER on IntegriCloud