about summary refs log tree commit diff
diff options
context:
space:
mode:
authorMazdak Farrokhzad <twingoow@gmail.com>2019-07-13 16:18:38 +0200
committerGitHub <noreply@github.com>2019-07-13 16:18:38 +0200
commit4fe6e63cd60ade52cd24616e17de5c570b06b0e7 (patch)
tree471a5bc275f28abb2c7c11b930774b9ab10eb7bd
parent833dada10632814723426f07c53c9913dfec50c3 (diff)
parente1c7747cf06bc063a6586c1eab898703f61899d8 (diff)
downloadrust-4fe6e63cd60ade52cd24616e17de5c570b06b0e7.tar.gz
rust-4fe6e63cd60ade52cd24616e17de5c570b06b0e7.zip
Rollup merge of #62604 - estebank:unemitted-err-ice, r=pnkfelix
Handle errors during error recovery gracefully

Fix #62546.
-rw-r--r--src/libsyntax/parse/parser.rs11
-rw-r--r--src/test/ui/parser/issue-62546.rs3
-rw-r--r--src/test/ui/parser/issue-62546.stderr17
3 files changed, 27 insertions, 4 deletions
diff --git a/src/libsyntax/parse/parser.rs b/src/libsyntax/parse/parser.rs
index e0633f73ac4..83030e89af3 100644
--- a/src/libsyntax/parse/parser.rs
+++ b/src/libsyntax/parse/parser.rs
@@ -7410,10 +7410,13 @@ impl<'a> Parser<'a> {
             } else if self.look_ahead(1, |t| *t == token::OpenDelim(token::Paren)) {
                 let ident = self.parse_ident().unwrap();
                 self.bump();  // `(`
-                let kw_name = if let Ok(Some(_)) = self.parse_self_arg_with_attrs() {
-                    "method"
-                } else {
-                    "function"
+                let kw_name = match self.parse_self_arg_with_attrs() {
+                    Ok(Some(_)) => "method",
+                    Ok(None) => "function",
+                    Err(mut err) => {
+                        err.cancel();
+                        "function"
+                    }
                 };
                 self.consume_block(token::Paren);
                 let (kw, kw_name, ambiguous) = if self.check(&token::RArrow) {
diff --git a/src/test/ui/parser/issue-62546.rs b/src/test/ui/parser/issue-62546.rs
new file mode 100644
index 00000000000..75b95e74073
--- /dev/null
+++ b/src/test/ui/parser/issue-62546.rs
@@ -0,0 +1,3 @@
+pub t(#
+//~^ ERROR missing `fn` or `struct` for function or struct definition
+//~ ERROR this file contains an un-closed delimiter
diff --git a/src/test/ui/parser/issue-62546.stderr b/src/test/ui/parser/issue-62546.stderr
new file mode 100644
index 00000000000..631aac95505
--- /dev/null
+++ b/src/test/ui/parser/issue-62546.stderr
@@ -0,0 +1,17 @@
+error: this file contains an un-closed delimiter
+  --> $DIR/issue-62546.rs:3:53
+   |
+LL | pub t(#
+   |      - un-closed delimiter
+LL |
+LL |
+   |                                                     ^
+
+error: missing `fn` or `struct` for function or struct definition
+  --> $DIR/issue-62546.rs:1:4
+   |
+LL | pub t(#
+   | ---^- help: if you meant to call a macro, try: `t!`
+
+error: aborting due to 2 previous errors
+