rust/tests/ui/never_loop.rs

203 lines
3.2 KiB
Rust
Raw Normal View History

2018-10-06 11:18:06 -05:00
// 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 <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.
2018-12-09 16:26:16 -06:00
#![allow(
clippy::single_match,
unused_assignments,
unused_variables,
clippy::while_immutable_condition
)]
2017-05-31 23:22:15 -05:00
fn test1() {
let mut x = 0;
2018-12-09 16:26:16 -06:00
loop {
// clippy::never_loop
2017-05-31 23:22:15 -05:00
x += 1;
if x == 1 {
2018-12-09 16:26:16 -06:00
return;
2017-05-31 23:22:15 -05:00
}
break;
}
2017-05-30 20:44:01 -05:00
}
2017-05-31 23:22:15 -05:00
fn test2() {
let mut x = 0;
loop {
2017-05-31 23:22:15 -05:00
x += 1;
if x == 1 {
2018-12-09 16:26:16 -06:00
break;
}
}
2017-05-30 20:44:01 -05:00
}
2017-05-31 23:22:15 -05:00
fn test3() {
let mut x = 0;
2018-12-09 16:26:16 -06:00
loop {
// never loops
2017-05-31 23:22:15 -05:00
x += 1;
2018-12-09 16:26:16 -06:00
break;
}
2017-05-30 20:44:01 -05:00
}
2017-05-31 23:22:15 -05:00
fn test4() {
let mut x = 1;
loop {
2017-05-31 23:22:15 -05:00
x += 1;
match x {
5 => return,
_ => (),
}
}
}
2017-05-30 20:44:01 -05:00
2017-05-31 23:22:15 -05:00
fn test5() {
let i = 0;
2018-12-09 16:26:16 -06:00
loop {
// never loops
while i == 0 {
// never loops
break;
2017-05-31 23:22:15 -05:00
}
2018-12-09 16:26:16 -06:00
return;
}
2017-05-31 23:22:15 -05:00
}
fn test6() {
let mut x = 0;
2017-09-14 08:27:29 -05:00
'outer: loop {
2017-05-31 23:22:15 -05:00
x += 1;
2018-12-09 16:26:16 -06:00
loop {
// never loops
if x == 5 {
break;
}
continue 'outer;
}
return;
}
2017-05-31 23:22:15 -05:00
}
fn test7() {
let mut x = 0;
2017-05-30 20:44:01 -05:00
loop {
2017-05-31 23:22:15 -05:00
x += 1;
2017-05-30 20:44:01 -05:00
match x {
2017-05-31 23:22:15 -05:00
1 => continue,
2017-05-30 20:44:01 -05:00
_ => (),
}
2018-12-09 16:26:16 -06:00
return;
2017-05-31 23:22:15 -05:00
}
}
fn test8() {
let mut x = 0;
loop {
x += 1;
match x {
5 => return,
_ => continue,
}
}
}
fn test9() {
let x = Some(1);
2018-12-09 16:26:16 -06:00
while let Some(y) = x {
// never loops
return;
2017-05-31 23:22:15 -05:00
}
}
fn test10() {
2018-12-09 16:26:16 -06:00
for x in 0..10 {
// never loops
2017-05-31 23:22:15 -05:00
match x {
1 => break,
_ => return,
}
2017-05-30 20:44:01 -05:00
}
}
2017-07-04 20:56:05 -05:00
fn test11<F: FnMut() -> i32>(mut f: F) {
loop {
return match f() {
1 => continue,
_ => (),
2018-12-09 16:26:16 -06:00
};
2017-07-04 20:56:05 -05:00
}
}
2017-09-14 08:27:29 -05:00
pub fn test12(a: bool, b: bool) {
'label: loop {
loop {
if a {
continue 'label;
}
if b {
break;
}
}
break;
}
}
2017-10-05 23:46:08 -05:00
pub fn test13() {
let mut a = true;
2018-12-09 16:26:16 -06:00
loop {
// infinite loop
2017-10-05 23:46:08 -05:00
while a {
if true {
a = false;
continue;
}
return;
}
}
}
2017-10-05 23:46:08 -05:00
pub fn test14() {
let mut a = true;
2018-12-09 16:26:16 -06:00
'outer: while a {
// never loops
2017-10-05 23:46:08 -05:00
while a {
if a {
a = false;
2018-12-09 16:26:16 -06:00
continue;
2017-10-05 23:46:08 -05:00
}
}
break 'outer;
}
}
// Issue #1991: the outter loop should not warn.
pub fn test15() {
'label: loop {
while false {
break 'label;
}
}
}
2017-05-30 20:44:01 -05:00
fn main() {
2017-05-31 23:22:15 -05:00
test1();
test2();
test3();
test4();
test5();
test6();
test7();
test8();
test9();
test10();
2017-07-04 20:56:05 -05:00
test11(|| 0);
2017-09-14 08:27:29 -05:00
test12(true, false);
2017-10-05 23:46:08 -05:00
test13();
2017-10-05 23:46:08 -05:00
test14();
2017-05-30 20:44:01 -05:00
}