about summary refs log tree commit diff
path: root/tests/ui/loops/loop-break-value.rs
diff options
context:
space:
mode:
Diffstat (limited to 'tests/ui/loops/loop-break-value.rs')
-rw-r--r--tests/ui/loops/loop-break-value.rs98
1 files changed, 98 insertions, 0 deletions
diff --git a/tests/ui/loops/loop-break-value.rs b/tests/ui/loops/loop-break-value.rs
new file mode 100644
index 00000000000..51c9a36a039
--- /dev/null
+++ b/tests/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
+    }
+}