summaryrefslogtreecommitdiffstats
path: root/llvm/lib/MC/MCParser/MCAsmParser.cpp
diff options
context:
space:
mode:
authorNirav Dave <niravd@google.com>2016-09-13 13:55:06 +0000
committerNirav Dave <niravd@google.com>2016-09-13 13:55:06 +0000
commit9fa8af21807e91ffbdf96ac3d9dde50cffeb7457 (patch)
tree2dac47e674dd60caf7bd765d907c19cd2caee339 /llvm/lib/MC/MCParser/MCAsmParser.cpp
parent7ea0d3947a070aed7c75ee253ae3addd252fe9f2 (diff)
downloadbcm5719-llvm-9fa8af21807e91ffbdf96ac3d9dde50cffeb7457.tar.gz
bcm5719-llvm-9fa8af21807e91ffbdf96ac3d9dde50cffeb7457.zip
Defer asm errors to post-statement failure
Recommitting after fixing AsmParser Initialization. Allow errors to be deferred and emitted as part of clean up to simplify and shorten Assembly parser code. This will allow error messages to be emitted in helper functions and be modified by the caller which has better context. As part of this many minor cleanups to the Parser: * Unify parser cleanup on error * Add Workaround for incorrect return values in ParseDirective instances * Tighten checks on error-signifying return values for parser functions and fix in-tree TargetParsers to be more consistent with the changes. * Fix AArch64 test cases checking for spurious error messages that are now fixed. These changes should be backwards compatible with current Target Parsers so long as the error status are correctly returned in appropriate functions. Reviewers: rnk, majnemer Subscribers: aemerson, jyknight, llvm-commits Differential Revision: https://reviews.llvm.org/D24047 llvm-svn: 281336
Diffstat (limited to 'llvm/lib/MC/MCParser/MCAsmParser.cpp')
-rw-r--r--llvm/lib/MC/MCParser/MCAsmParser.cpp18
1 files changed, 14 insertions, 4 deletions
diff --git a/llvm/lib/MC/MCParser/MCAsmParser.cpp b/llvm/lib/MC/MCParser/MCAsmParser.cpp
index 3282a61e515..f8bc04f7144 100644
--- a/llvm/lib/MC/MCParser/MCAsmParser.cpp
+++ b/llvm/lib/MC/MCParser/MCAsmParser.cpp
@@ -17,8 +17,8 @@
#include "llvm/Support/raw_ostream.h"
using namespace llvm;
-MCAsmParser::MCAsmParser() : TargetParser(nullptr), ShowParsedOperands(0) {
-}
+MCAsmParser::MCAsmParser()
+ : TargetParser(nullptr), ShowParsedOperands(0), HadError(false), PendingErrors() {}
MCAsmParser::~MCAsmParser() {
}
@@ -84,8 +84,18 @@ bool MCAsmParser::check(bool P, SMLoc Loc, const Twine &Msg) {
return false;
}
-bool MCAsmParser::TokError(const Twine &Msg, ArrayRef<SMRange> Ranges) {
- Error(getLexer().getLoc(), Msg, Ranges);
+bool MCAsmParser::TokError(const Twine &Msg, SMRange Range) {
+ return Error(getLexer().getLoc(), Msg, Range);
+}
+
+bool MCAsmParser::Error(SMLoc L, const Twine &Msg, SMRange Range) {
+ HadError = true;
+
+ MCPendingError PErr;
+ PErr.Loc = L;
+ Msg.toVector(PErr.Msg);
+ PErr.Range = Range;
+ PendingErrors.push_back(PErr);
return true;
}
OpenPOWER on IntegriCloud