diff options
| -rw-r--r-- | llvm/include/llvm/MC/MCParser/MCAsmParser.h | 4 | ||||
| -rw-r--r-- | llvm/lib/MC/MCParser/AsmParser.cpp | 6 | ||||
| -rw-r--r-- | llvm/lib/Target/ARM/AsmParser/ARMAsmParser.cpp | 15 | ||||
| -rw-r--r-- | llvm/test/MC/ARM/eh-directive-cantunwind-diagnostics.s | 8 | ||||
| -rw-r--r-- | llvm/test/MC/ARM/eh-directive-fnstart-diagnostics.s | 2 |
5 files changed, 24 insertions, 11 deletions
diff --git a/llvm/include/llvm/MC/MCParser/MCAsmParser.h b/llvm/include/llvm/MC/MCParser/MCAsmParser.h index 1d155342999..0389caa0545 100644 --- a/llvm/include/llvm/MC/MCParser/MCAsmParser.h +++ b/llvm/include/llvm/MC/MCParser/MCAsmParser.h @@ -118,6 +118,10 @@ public: const MCInstPrinter *IP, MCAsmParserSemaCallback &SI) = 0; + /// Note - Emit a note at the location \p L, with the message \p Msg. + virtual void Note(SMLoc L, const Twine &Msg, + ArrayRef<SMRange> Ranges = None) = 0; + /// Warning - Emit a warning at the location \p L, with the message \p Msg. /// /// \return The return value is true, if warnings are fatal. diff --git a/llvm/lib/MC/MCParser/AsmParser.cpp b/llvm/lib/MC/MCParser/AsmParser.cpp index 4b83144f3bd..451ae7ae407 100644 --- a/llvm/lib/MC/MCParser/AsmParser.cpp +++ b/llvm/lib/MC/MCParser/AsmParser.cpp @@ -211,6 +211,7 @@ public: AssemblerDialect = i; } + virtual void Note(SMLoc L, const Twine &Msg, ArrayRef<SMRange> Ranges = None); virtual bool Warning(SMLoc L, const Twine &Msg, ArrayRef<SMRange> Ranges = None); virtual bool Error(SMLoc L, const Twine &Msg, @@ -537,6 +538,11 @@ void AsmParser::printMacroInstantiations() { "while in macro instantiation"); } +void AsmParser::Note(SMLoc L, const Twine &Msg, ArrayRef<SMRange> Ranges) { + printMessage(L, SourceMgr::DK_Note, Msg, Ranges); + printMacroInstantiations(); +} + bool AsmParser::Warning(SMLoc L, const Twine &Msg, ArrayRef<SMRange> Ranges) { if (FatalAssemblerWarnings) return Error(L, Msg, Ranges); diff --git a/llvm/lib/Target/ARM/AsmParser/ARMAsmParser.cpp b/llvm/lib/Target/ARM/AsmParser/ARMAsmParser.cpp index b57527c91e3..be148ca7d29 100644 --- a/llvm/lib/Target/ARM/AsmParser/ARMAsmParser.cpp +++ b/llvm/lib/Target/ARM/AsmParser/ARMAsmParser.cpp @@ -190,6 +190,9 @@ class ARMAsmParser : public MCTargetAsmParser { MCAsmParser &getParser() const { return Parser; } MCAsmLexer &getLexer() const { return Parser.getLexer(); } + void Note(SMLoc L, const Twine &Msg, ArrayRef<SMRange> Ranges = None) { + return Parser.Note(L, Msg, Ranges); + } bool Warning(SMLoc L, const Twine &Msg, ArrayRef<SMRange> Ranges = None) { return Parser.Warning(L, Msg, Ranges); @@ -8245,7 +8248,7 @@ bool ARMAsmParser::parseDirectiveFPU(SMLoc L) { bool ARMAsmParser::parseDirectiveFnStart(SMLoc L) { if (FnStartLoc.isValid()) { Error(L, ".fnstart starts before the end of previous one"); - Error(FnStartLoc, "previous .fnstart starts here"); + Note(FnStartLoc, "previous .fnstart starts here"); return false; } @@ -8280,12 +8283,12 @@ bool ARMAsmParser::parseDirectiveCantUnwind(SMLoc L) { } if (HandlerDataLoc.isValid()) { Error(L, ".cantunwind can't be used with .handlerdata directive"); - Error(HandlerDataLoc, ".handlerdata was specified here"); + Note(HandlerDataLoc, ".handlerdata was specified here"); return false; } if (PersonalityLoc.isValid()) { Error(L, ".cantunwind can't be used with .personality directive"); - Error(PersonalityLoc, ".personality was specified here"); + Note(PersonalityLoc, ".personality was specified here"); return false; } @@ -8304,12 +8307,12 @@ bool ARMAsmParser::parseDirectivePersonality(SMLoc L) { } if (CantUnwindLoc.isValid()) { Error(L, ".personality can't be used with .cantunwind directive"); - Error(CantUnwindLoc, ".cantunwind was specified here"); + Note(CantUnwindLoc, ".cantunwind was specified here"); return false; } if (HandlerDataLoc.isValid()) { Error(L, ".personality must precede .handlerdata directive"); - Error(HandlerDataLoc, ".handlerdata was specified here"); + Note(HandlerDataLoc, ".handlerdata was specified here"); return false; } @@ -8338,7 +8341,7 @@ bool ARMAsmParser::parseDirectiveHandlerData(SMLoc L) { } if (CantUnwindLoc.isValid()) { Error(L, ".handlerdata can't be used with .cantunwind directive"); - Error(CantUnwindLoc, ".cantunwind was specified here"); + Note(CantUnwindLoc, ".cantunwind was specified here"); return false; } diff --git a/llvm/test/MC/ARM/eh-directive-cantunwind-diagnostics.s b/llvm/test/MC/ARM/eh-directive-cantunwind-diagnostics.s index 640cc3005fc..9eca16498e1 100644 --- a/llvm/test/MC/ARM/eh-directive-cantunwind-diagnostics.s +++ b/llvm/test/MC/ARM/eh-directive-cantunwind-diagnostics.s @@ -24,7 +24,7 @@ func1: @ CHECK: error: .personality can't be used with .cantunwind directive @ CHECK: .personality __gxx_personality_v0 @ CHECK: ^ -@ CHECK: error: .cantunwind was specified here +@ CHECK: note: .cantunwind was specified here @ CHECK: .cantunwind @ CHECK: ^ .fnend @@ -44,7 +44,7 @@ func2: @ CHECK: error: .handlerdata can't be used with .cantunwind directive @ CHECK: .handlerdata @ CHECK: ^ -@ CHECK: error: .cantunwind was specified here +@ CHECK: note: .cantunwind was specified here @ CHECK: .cantunwind @ CHECK: ^ .fnend @@ -64,7 +64,7 @@ func3: @ CHECK: error: .cantunwind can't be used with .personality directive @ CHECK: .cantunwind @ CHECK: ^ -@ CHECK: error: .personality was specified here +@ CHECK: note: .personality was specified here @ CHECK: .personality __gxx_personality_v0 @ CHECK: ^ .fnend @@ -84,7 +84,7 @@ func4: @ CHECK: error: .cantunwind can't be used with .handlerdata directive @ CHECK: .cantunwind @ CHECK: ^ -@ CHECK: error: .handlerdata was specified here +@ CHECK: note: .handlerdata was specified here @ CHECK: .handlerdata @ CHECK: ^ .fnend diff --git a/llvm/test/MC/ARM/eh-directive-fnstart-diagnostics.s b/llvm/test/MC/ARM/eh-directive-fnstart-diagnostics.s index 75ddd9faebc..fe2ba03bd0f 100644 --- a/llvm/test/MC/ARM/eh-directive-fnstart-diagnostics.s +++ b/llvm/test/MC/ARM/eh-directive-fnstart-diagnostics.s @@ -24,7 +24,7 @@ func1: @ CHECK: error: .fnstart starts before the end of previous one @ CHECK: .fnstart @ CHECK: ^ -@ CHECK: error: previous .fnstart starts here +@ CHECK: note: previous .fnstart starts here @ CHECK: .fnstart @ CHECK: ^ func2: |

