// Copyright 2014-2018 The Rust Project Developers. See the COPYRIGHT // file at the top-level directory of this distribution. // // 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. #![feature(tool_lints)] #![allow(clippy::single_match, unused_assignments, unused_variables, clippy::while_immutable_condition)] fn test1() { let mut x = 0; loop { // clippy::never_loop x += 1; if x == 1 { return } break; } } fn test2() { let mut x = 0; loop { x += 1; if x == 1 { break } } } fn test3() { let mut x = 0; loop { // never loops x += 1; break } } fn test4() { let mut x = 1; loop { x += 1; match x { 5 => return, _ => (), } } } fn test5() { let i = 0; loop { // never loops while i == 0 { // never loops break } return } } fn test6() { let mut x = 0; 'outer: loop { x += 1; loop { // never loops if x == 5 { break } continue 'outer } return } } fn test7() { let mut x = 0; loop { x += 1; match x { 1 => continue, _ => (), } return } } fn test8() { let mut x = 0; loop { x += 1; match x { 5 => return, _ => continue, } } } fn test9() { let x = Some(1); while let Some(y) = x { // never loops return } } fn test10() { for x in 0..10 { // never loops match x { 1 => break, _ => return, } } } fn test11 i32>(mut f: F) { loop { return match f() { 1 => continue, _ => (), } } } pub fn test12(a: bool, b: bool) { 'label: loop { loop { if a { continue 'label; } if b { break; } } break; } } pub fn test13() { let mut a = true; loop { // infinite loop while a { if true { a = false; continue; } return; } } } pub fn test14() { let mut a = true; 'outer: while a { // never loops while a { if a { a = false; continue } } break 'outer; } } // Issue #1991: the outter loop should not warn. pub fn test15() { 'label: loop { while false { break 'label; } } } fn main() { test1(); test2(); test3(); test4(); test5(); test6(); test7(); test8(); test9(); test10(); test11(|| 0); test12(true, false); test13(); test14(); }