summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--llvm/include/llvm/MC/MCParser/MCAsmParser.h4
-rw-r--r--llvm/lib/MC/MCParser/AsmParser.cpp6
-rw-r--r--llvm/lib/Target/ARM/AsmParser/ARMAsmParser.cpp15
-rw-r--r--llvm/test/MC/ARM/eh-directive-cantunwind-diagnostics.s8
-rw-r--r--llvm/test/MC/ARM/eh-directive-fnstart-diagnostics.s2
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:
OpenPOWER on IntegriCloud