From: varkor Date: Sat, 23 Jun 2018 10:52:45 +0000 (+0100) Subject: Fix an ICE with `continue` as an array length X-Git-Url: https://git.lizzy.rs/?a=commitdiff_plain;h=f68ee0b4e14a8a7e50587bf9752fc1aa72297770;p=rust.git Fix an ICE with `continue` as an array length --- diff --git a/src/librustc_typeck/check/mod.rs b/src/librustc_typeck/check/mod.rs index e84586520b1..889073f6b4c 100644 --- a/src/librustc_typeck/check/mod.rs +++ b/src/librustc_typeck/check/mod.rs @@ -3846,7 +3846,14 @@ fn check_expr_kind(&self, } } - hir::ExprContinue(_) => { tcx.types.never } + hir::ExprContinue(destination) => { + if let Ok(_) = destination.target_id { + tcx.types.never + } else { + // There was an error, make typecheck fail + tcx.types.err + } + } hir::ExprRet(ref expr_opt) => { if self.ret_coercion.is_none() { struct_span_err!(self.tcx.sess, expr.span, E0572, diff --git a/src/test/ui/closure-array-break-length.rs b/src/test/ui/closure-array-break-length.rs new file mode 100644 index 00000000000..67feed38b6c --- /dev/null +++ b/src/test/ui/closure-array-break-length.rs @@ -0,0 +1,13 @@ +// 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +fn main() { + |_: [_; continue]| {}; //~ ERROR: `continue` outside of loop +} diff --git a/src/test/ui/closure-array-break-length.stderr b/src/test/ui/closure-array-break-length.stderr new file mode 100644 index 00000000000..a1e28e84ced --- /dev/null +++ b/src/test/ui/closure-array-break-length.stderr @@ -0,0 +1,9 @@ +error[E0268]: `continue` outside of loop + --> $DIR/closure-array-break-length.rs:12:13 + | +LL | |_: [_; continue]| {}; //~ ERROR: `continue` outside of loop + | ^^^^^^^^ cannot break outside of a loop + +error: aborting due to previous error + +For more information about this error, try `rustc --explain E0268`.