#![feature(never_type)] fn main() { let val: ! = loop { break break; }; //~^ ERROR mismatched types loop { if true { break "asdf"; } else { break 123; //~ ERROR mismatched types } }; let _: i32 = loop { break "asdf"; //~ ERROR mismatched types }; let _: i32 = 'outer_loop: loop { loop { break 'outer_loop "nope"; //~ ERROR mismatched types break "ok"; }; }; let _: Option = loop { break; //~ ERROR mismatched types }; 'while_loop: while true { //~ WARN denote infinite loops with break; break (); //~ ERROR `break` with value from a `while` loop loop { break 'while_loop 123; //~^ ERROR `break` with value from a `while` loop break 456; break 789; }; } while let Some(_) = Some(()) { if break () { //~ ERROR `break` with value from a `while` loop } } while let Some(_) = Some(()) { break None; //~^ ERROR `break` with value from a `while` loop } 'while_let_loop: while let Some(_) = Some(()) { loop { break 'while_let_loop "nope"; //~^ ERROR `break` with value from a `while` loop break 33; }; } for _ in &[1,2,3] { break (); //~ ERROR `break` with value from a `for` loop break [()]; //~^ ERROR `break` with value from a `for` loop } 'for_loop: for _ in &[1,2,3] { loop { break Some(3); break 'for_loop Some(17); //~^ ERROR `break` with value from a `for` loop }; } let _: i32 = 'a: loop { let _: () = 'b: loop { break ('c: loop { break; break 'c 123; //~ ERROR mismatched types }); break 'a 123; }; }; loop { break (break, break); //~ ERROR mismatched types }; loop { break; break 2; //~ ERROR mismatched types }; loop { break 2; break; //~ ERROR mismatched types break 4; }; 'LOOP: for _ in 0 .. 9 { break LOOP; //~^ ERROR cannot find value `LOOP` in this scope } let _ = 'a: loop { loop { break; // This doesn't affect the expected break type of the 'a loop loop { loop { break 'a 1; } } } break; //~ ERROR mismatched types }; let _ = 'a: loop { loop { break; // This doesn't affect the expected break type of the 'a loop loop { loop { break 'a 1; } } } break 'a; //~ ERROR mismatched types }; loop { break; let _ = loop { break 2; loop { break; } }; break 2; //~ ERROR mismatched types } 'a: loop { break; let _ = 'a: loop { //~^ WARNING label name `'a` shadows a label name that is already in scope break 2; loop { break 'a; //~ ERROR mismatched types } }; break 2; //~ ERROR mismatched types } 'a: loop { break; let _ = 'a: loop { //~^ WARNING label name `'a` shadows a label name that is already in scope break 'a 2; loop { break 'a; //~ ERROR mismatched types } }; break 2; //~ ERROR mismatched types }; loop { // point at the return type break 2; //~ ERROR mismatched types } }