// Regression test for #122561 fn for_infinite() -> bool { for i in 0.. { //~^ ERROR mismatched types return false; } } fn for_finite() -> String { for i in 0..5 { //~^ ERROR mismatched types return String::from("test"); } } fn for_zero_times() -> bool { for i in 0..0 { //~^ ERROR mismatched types return true; } } fn for_never_type() -> ! { for i in 0..5 { //~^ ERROR mismatched types } } // Entire function on a single line. // Tests that we format the suggestion // correctly in this case fn for_single_line() -> bool { for i in 0.. { return false; } } //~^ ERROR mismatched types // Loop in an anon const in function args // Tests that we: // a. deal properly with this complex case // b. format the suggestion correctly so // that it's readable fn for_in_arg(a: &[(); for x in 0..2 {}]) -> bool { //~^ ERROR `for` is not allowed in a `const` //~| ERROR mismatched types true } fn while_inifinite() -> bool { while true { //~^ ERROR mismatched types //~| WARN denote infinite loops with `loop { ... }` [while_true] return true; } } fn while_finite() -> bool { let mut i = 0; while i < 3 { //~^ ERROR mismatched types i += 1; return true; } } fn while_zero_times() -> bool { while false { //~^ ERROR mismatched types return true; } } fn while_never_type() -> ! { while true { //~^ ERROR mismatched types //~| WARN denote infinite loops with `loop { ... }` [while_true] } } // No type mismatch error in this case fn loop_() -> bool { loop { return true; } } const C: i32 = { for i in 0.. { //~^ ERROR `for` is not allowed in a `const` //~| ERROR mismatched types } }; fn main() { let _ = [10; { for i in 0..5 { //~^ ERROR `for` is not allowed in a `const` //~| ERROR mismatched types } }]; let _ = [10; { while false { //~^ ERROR mismatched types } }]; let _ = |a: &[(); for x in 0..2 {}]| {}; //~^ ERROR `for` is not allowed in a `const` //~| ERROR mismatched types }