mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2026-04-27 04:18:42 +00:00
Wire up support for diagnostic ranges in the ARMAsmParser.
As an example, attach range info to the "invalid instruction" message:
$ clang -arch arm -c asm.c
asm.c:2:11: error: invalid instruction
__asm__("foo r0");
^
<inline asm>:1:2: note: instantiated into assembly here
foo r0
^~~
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@154765 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
1 parent
3ab32ea49e
commit
362a05a635
1 file changed
+12
-3
@@ -82,8 +82,14 @@ class ARMAsmParser : public MCTargetAsmParser {
|
||||
MCAsmParser &getParser() const { return Parser; }
|
||||
MCAsmLexer &getLexer() const { return Parser.getLexer(); }
|
||||
|
||||
void Warning(SMLoc L, const Twine &Msg) { Parser.Warning(L, Msg); }
|
||||
bool Error(SMLoc L, const Twine &Msg) { return Parser.Error(L, Msg); }
|
||||
bool Warning(SMLoc L, const Twine &Msg,
|
||||
ArrayRef<SMRange> Ranges = ArrayRef<SMRange>()) {
|
||||
return Parser.Warning(L, Msg, Ranges);
|
||||
}
|
||||
bool Error(SMLoc L, const Twine &Msg,
|
||||
ArrayRef<SMRange> Ranges = ArrayRef<SMRange>()) {
|
||||
return Parser.Error(L, Msg, Ranges);
|
||||
}
|
||||
|
||||
int tryParseRegister();
|
||||
bool tryParseRegisterWithWriteBack(SmallVectorImpl<MCParsedAsmOperand*> &);
|
||||
@@ -478,6 +484,8 @@ public:
|
||||
/// getEndLoc - Get the location of the last token of this operand.
|
||||
SMLoc getEndLoc() const { return EndLoc; }
|
||||
|
||||
SMRange getLocRange() const { return SMRange(StartLoc, EndLoc); }
|
||||
|
||||
ARMCC::CondCodes getCondCode() const {
|
||||
assert(Kind == k_CondCode && "Invalid access!");
|
||||
return CC.Val;
|
||||
@@ -7321,7 +7329,8 @@ MatchAndEmitInstruction(SMLoc IDLoc,
|
||||
return Error(ErrorLoc, "invalid operand for instruction");
|
||||
}
|
||||
case Match_MnemonicFail:
|
||||
return Error(IDLoc, "invalid instruction");
|
||||
return Error(IDLoc, "invalid instruction",
|
||||
((ARMOperand*)Operands[0])->getLocRange());
|
||||
case Match_ConversionFail:
|
||||
// The converter function will have already emited a diagnostic.
|
||||
return true;
|
||||
|
||||
Reference in new issue
Block a user