about summary refs log tree commit diff
path: root/src/libsyntax/parse
diff options
context:
space:
mode:
authorEsteban Küber <esteban@kuber.com.ar>2019-07-12 18:37:57 -0700
committerEsteban Küber <esteban@kuber.com.ar>2019-07-12 18:55:01 -0700
commit8259a2dd425a94dbce00999027794f65806de831 (patch)
treefcb29eb7da79e1885831a6ebc9e6af0a26671443 /src/libsyntax/parse
parent71f9384e3bec467158a628e2d11e77ffada16a90 (diff)
downloadrust-8259a2dd425a94dbce00999027794f65806de831.tar.gz
rust-8259a2dd425a94dbce00999027794f65806de831.zip
Do not emit type errors after parse error in last statement of block
When recovering from a parse error inside a block, do not emit type
errors generating on that block's recovered return expression.

Fix #57383.
Diffstat (limited to 'src/libsyntax/parse')
-rw-r--r--src/libsyntax/parse/parser.rs6
1 files changed, 4 insertions, 2 deletions
diff --git a/src/libsyntax/parse/parser.rs b/src/libsyntax/parse/parser.rs
index 83dbff6b2d5..6864bd0efc2 100644
--- a/src/libsyntax/parse/parser.rs
+++ b/src/libsyntax/parse/parser.rs
@@ -4678,6 +4678,9 @@ impl<'a> Parser<'a> {
                     {
                         e.emit();
                         self.recover_stmt();
+                        // Don't complain about type errors in body tail after parse error (#57383).
+                        let sp = expr.span.to(self.prev_span);
+                        stmt.node = StmtKind::Expr(DummyResult::raw_expr(sp, true));
                     }
                 }
             }
@@ -4695,8 +4698,7 @@ impl<'a> Parser<'a> {
         if self.eat(&token::Semi) {
             stmt = stmt.add_trailing_semicolon();
         }
-
-        stmt.span = stmt.span.with_hi(self.prev_span.hi());
+        stmt.span = stmt.span.to(self.prev_span);
         Ok(Some(stmt))
     }