Fix an ICE with continue as an array length

This commit is contained in:
varkor 2018-06-23 11:52:45 +01:00
parent 4fe88c05cd
commit f68ee0b4e1
3 changed files with 30 additions and 1 deletions

View file

@ -3846,7 +3846,14 @@ impl<'a, 'gcx, 'tcx> FnCtxt<'a, 'gcx, 'tcx> {
}
}
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,

View file

@ -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 <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() {
|_: [_; continue]| {}; //~ ERROR: `continue` outside of loop
}

View file

@ -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`.