forked from OSchip/llvm-project
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 ^~~ llvm-svn: 154765
This commit is contained in:
parent
02ef0c3524
commit
673824b4a1
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue