about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--src/librustc_typeck/check/upvar.rs4
-rw-r--r--src/test/ui/issue-51714.rs19
-rw-r--r--src/test/ui/issue-51714.stderr15
3 files changed, 38 insertions, 0 deletions
diff --git a/src/librustc_typeck/check/upvar.rs b/src/librustc_typeck/check/upvar.rs
index cfb9c2a5062..e24269bca57 100644
--- a/src/librustc_typeck/check/upvar.rs
+++ b/src/librustc_typeck/check/upvar.rs
@@ -111,6 +111,10 @@ impl<'a, 'gcx, 'tcx> FnCtxt<'a, 'gcx, 'tcx> {
         let (closure_def_id, substs) = match self.node_ty(closure_hir_id).sty {
             ty::TyClosure(def_id, substs) => (def_id, UpvarSubsts::Closure(substs)),
             ty::TyGenerator(def_id, substs, _) => (def_id, UpvarSubsts::Generator(substs)),
+            ty::TyError => {
+                // #51714: skip analysis when we have already encountered type errors
+                return;
+            }
             ref t => {
                 span_bug!(
                     span,
diff --git a/src/test/ui/issue-51714.rs b/src/test/ui/issue-51714.rs
new file mode 100644
index 00000000000..96c5b92ddfd
--- /dev/null
+++ b/src/test/ui/issue-51714.rs
@@ -0,0 +1,19 @@
+// Copyright 2018 The Rust Project Developers. See the COPYRIGHT
+// file at the top-level directory of this distribution and at
+// http://rust-lang.org/COPYRIGHT.
+//
+// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
+// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
+// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
+// option. This file may not be copied, modified, or distributed
+// except according to those terms.
+
+fn main() {
+    |_:  [_; return || {}] | {}
+    //~^ ERROR return statement outside of function body
+}
+
+fn foo() {
+    [(); return || {}];
+    //~^ ERROR return statement outside of function body
+}
diff --git a/src/test/ui/issue-51714.stderr b/src/test/ui/issue-51714.stderr
new file mode 100644
index 00000000000..746adea6b7e
--- /dev/null
+++ b/src/test/ui/issue-51714.stderr
@@ -0,0 +1,15 @@
+error[E0572]: return statement outside of function body
+  --> $DIR/issue-51714.rs:12:14
+   |
+LL |     |_:  [_; return || {}] | {}
+   |              ^^^^^^^^^^^^
+
+error[E0572]: return statement outside of function body
+  --> $DIR/issue-51714.rs:17:10
+   |
+LL |     [(); return || {}];
+   |          ^^^^^^^^^^^^
+
+error: aborting due to 2 previous errors
+
+For more information about this error, try `rustc --explain E0572`.