[mlir] Fix emitting an error at EOF
authorMogball <jeffniu22@gmail.com>
Wed, 23 Mar 2022 08:00:46 +0000 (08:00 +0000)
committerMogball <jeffniu22@gmail.com>
Wed, 23 Mar 2022 20:23:01 +0000 (20:23 +0000)
Emitting at error at EOF will emit the diagnostic past the end of the file. When emitting an error during parsing at EOF, emit it at the previous character.

Reviewed By: jpienaar

Differential Revision: https://reviews.llvm.org/D122295

mlir/lib/Parser/Parser.h
mlir/test/IR/invalid.mlir

index fb138d9..3abee1f 100644 (file)
@@ -69,6 +69,12 @@ public:
 
   /// Emit an error and return failure.
   InFlightDiagnostic emitError(const Twine &message = {}) {
+    // If the error is to be emitted at EOF, move it back one character.
+    if (state.curToken.is(Token::eof)) {
+      return emitError(
+          SMLoc::getFromPointer(state.curToken.getLoc().getPointer() - 1),
+          message);
+    }
     return emitError(state.curToken.getLoc(), message);
   }
   InFlightDiagnostic emitError(SMLoc loc, const Twine &message = {});
index 83d3a5d..954f0b1 100644 (file)
@@ -680,7 +680,7 @@ func @calls(%arg0: i32) {
   %z = "casdasda"(%x) : (ppop32) -> i32
 }
 // -----
-// expected-error@+2 {{expected SSA operand}}
+// expected-error@+1 {{expected SSA operand}}
 func@n(){^b(
 // -----
 
@@ -882,7 +882,7 @@ func @type_alias_unknown(!unknown_alias) -> () { // expected-error {{undefined s
 
 // -----
 
-!missing_type_alias = type // expected-error@+2 {{expected non-function type}}
+!missing_type_alias = type // expected-error@+1 {{expected non-function type}}
 
 // -----