about summary refs log tree commit diff
path: root/src/librustc_parse/parser
diff options
context:
space:
mode:
authorMazdak Farrokhzad <twingoow@gmail.com>2019-12-03 13:11:34 +0100
committerMazdak Farrokhzad <twingoow@gmail.com>2019-12-20 22:41:29 +0100
commit4e01b709640d9760758a19ef0dc3732991c14d30 (patch)
tree694280c46f0630be34afedc1960b8bc947df45f3 /src/librustc_parse/parser
parent3ed5ba7fa867d84ca9e7bc9213a5b571fdb7c5ed (diff)
downloadrust-4e01b709640d9760758a19ef0dc3732991c14d30.tar.gz
rust-4e01b709640d9760758a19ef0dc3732991c14d30.zip
add recovery to parse_labeled_expr
Diffstat (limited to 'src/librustc_parse/parser')
-rw-r--r--src/librustc_parse/parser/expr.rs8
1 files changed, 5 insertions, 3 deletions
diff --git a/src/librustc_parse/parser/expr.rs b/src/librustc_parse/parser/expr.rs
index 923e5d378c5..bfb10dd0f3a 100644
--- a/src/librustc_parse/parser/expr.rs
+++ b/src/librustc_parse/parser/expr.rs
@@ -1096,9 +1096,11 @@ impl<'a> Parser<'a> {
         }
 
         let msg = "expected `while`, `for`, `loop` or `{` after a label";
-        let mut err = self.fatal(msg);
-        err.span_label(self.token.span, msg);
-        return Err(err);
+        self.struct_span_err(self.token.span, msg)
+            .span_label(self.token.span, msg)
+            .emit();
+        // Continue as an expression in an effort to recover on `'label: non_block_expr`.
+        self.parse_expr()
     }
 
     /// Returns a string literal if the next token is a string literal.