From 431c3918189f845d3a57f0290857971ee03a7d33 Mon Sep 17 00:00:00 2001 From: Manish Goregaokar Date: Fri, 2 Oct 2015 13:25:34 +0530 Subject: [PATCH 1/2] Fix a panic caused by while let --- src/loops.rs | 6 ++++-- tests/compile-fail/while_loop.rs | 19 ++++++++++++++++++- 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/src/loops.rs b/src/loops.rs index 23be0ce728ff..2069a56f78f1 100644 --- a/src/loops.rs +++ b/src/loops.rs @@ -312,7 +312,7 @@ fn is_iterable_array(ty: ty::Ty) -> bool { fn extract_expr_from_first_stmt(block: &Block) -> Option<&Expr> { match block.expr { Some(_) => None, - None => match block.stmts[0].node { + None if !block.stmts.is_empty() => match block.stmts[0].node { StmtDecl(ref decl, _) => match decl.node { DeclLocal(ref local) => match local.init { Some(ref expr) => Some(expr), @@ -322,6 +322,7 @@ fn extract_expr_from_first_stmt(block: &Block) -> Option<&Expr> { }, _ => None, }, + _ => None, } } @@ -329,10 +330,11 @@ fn extract_expr_from_first_stmt(block: &Block) -> Option<&Expr> { fn extract_first_expr(block: &Block) -> Option<&Expr> { match block.expr { Some(ref expr) => Some(expr), - None => match block.stmts[0].node { + None if !block.stmts.is_empty() => match block.stmts[0].node { StmtExpr(ref expr, _) | StmtSemi(ref expr, _) => Some(expr), _ => None, }, + _ => None, } } diff --git a/tests/compile-fail/while_loop.rs b/tests/compile-fail/while_loop.rs index ef798b2a79e2..eca2c7e12aec 100755 --- a/tests/compile-fail/while_loop.rs +++ b/tests/compile-fail/while_loop.rs @@ -1,7 +1,9 @@ #![feature(plugin)] #![plugin(clippy)] -#[deny(while_let_loop)] +#![deny(while_let_loop)] +#![allow(dead_code, unused)] + fn main() { let y = Some(true); loop { //~ERROR @@ -44,3 +46,18 @@ fn main() { println!("{}", x); } } + +// regression test (#360) +// this should not panic +// it's okay if further iterations of the lint +// cause this function to trigger it +fn no_panic(slice: &[T]) { + let mut iter = slice.iter(); + loop { + let _ = match iter.next() { + Some(ele) => ele, + None => break + }; + loop {} + } +} From cd3b21907b256ce846169680239f61c336fd4edd Mon Sep 17 00:00:00 2001 From: Manish Goregaokar Date: Fri, 2 Oct 2015 13:26:04 +0530 Subject: [PATCH 2/2] bump --- Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index 5ff911c8ced6..0946855e3564 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "clippy" -version = "0.0.17" +version = "0.0.18" authors = [ "Manish Goregaokar ", "Andre Bogus ",