summaryrefslogtreecommitdiffstats
path: root/src/test/ui/loops/loop-break-value.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/test/ui/loops/loop-break-value.rs')
-rw-r--r--src/test/ui/loops/loop-break-value.rs98
1 files changed, 98 insertions, 0 deletions
diff --git a/src/test/ui/loops/loop-break-value.rs b/src/test/ui/loops/loop-break-value.rs
new file mode 100644
index 000000000..51c9a36a0
--- /dev/null
+++ b/src/test/ui/loops/loop-break-value.rs
@@ -0,0 +1,98 @@
+#![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";
+ };
+ };
+
+ '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
+ }
+}