From: Saleem Abdulrasool Date: Tue, 7 Jan 2014 02:28:31 +0000 (+0000) Subject: MCParser: introduce Note and use it for ARM AsmParser X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=307f17b9383dff92540e7fb8da28d36f966c2834;p=oota-llvm.git MCParser: introduce Note and use it for ARM AsmParser Introduce a new virtual method Note into the AsmParser. This completements the existing Warning and Error methods. Use the new method to clean up the output of the unwind routines in the ARM AsmParser. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@198661 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/llvm/MC/MCParser/MCAsmParser.h b/include/llvm/MC/MCParser/MCAsmParser.h index 1d155342999..0389caa0545 100644 --- a/include/llvm/MC/MCParser/MCAsmParser.h +++ b/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 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/lib/MC/MCParser/AsmParser.cpp b/lib/MC/MCParser/AsmParser.cpp index 4b83144f3bd..451ae7ae407 100644 --- a/lib/MC/MCParser/AsmParser.cpp +++ b/lib/MC/MCParser/AsmParser.cpp @@ -211,6 +211,7 @@ public: AssemblerDialect = i; } + virtual void Note(SMLoc L, const Twine &Msg, ArrayRef Ranges = None); virtual bool Warning(SMLoc L, const Twine &Msg, ArrayRef 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 Ranges) { + printMessage(L, SourceMgr::DK_Note, Msg, Ranges); + printMacroInstantiations(); +} + bool AsmParser::Warning(SMLoc L, const Twine &Msg, ArrayRef Ranges) { if (FatalAssemblerWarnings) return Error(L, Msg, Ranges); diff --git a/lib/Target/ARM/AsmParser/ARMAsmParser.cpp b/lib/Target/ARM/AsmParser/ARMAsmParser.cpp index b57527c91e3..be148ca7d29 100644 --- a/lib/Target/ARM/AsmParser/ARMAsmParser.cpp +++ b/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 Ranges = None) { + return Parser.Note(L, Msg, Ranges); + } bool Warning(SMLoc L, const Twine &Msg, ArrayRef 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/test/MC/ARM/eh-directive-cantunwind-diagnostics.s b/test/MC/ARM/eh-directive-cantunwind-diagnostics.s index 640cc3005fc..9eca16498e1 100644 --- a/test/MC/ARM/eh-directive-cantunwind-diagnostics.s +++ b/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/test/MC/ARM/eh-directive-fnstart-diagnostics.s b/test/MC/ARM/eh-directive-fnstart-diagnostics.s index 75ddd9faebc..fe2ba03bd0f 100644 --- a/test/MC/ARM/eh-directive-fnstart-diagnostics.s +++ b/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: