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