summaryrefslogtreecommitdiffstats
path: root/src/test/ui/for-loop-while/label_break_value.rs
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-17 12:19:03 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-17 12:19:03 +0000
commit64d98f8ee037282c35007b64c2649055c56af1db (patch)
tree5492bcf97fce41ee1c0b1cc2add283f3e66cdab0 /src/test/ui/for-loop-while/label_break_value.rs
parentAdding debian version 1.67.1+dfsg1-1. (diff)
downloadrustc-64d98f8ee037282c35007b64c2649055c56af1db.tar.xz
rustc-64d98f8ee037282c35007b64c2649055c56af1db.zip
Merging upstream version 1.68.2+dfsg1.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'src/test/ui/for-loop-while/label_break_value.rs')
-rw-r--r--src/test/ui/for-loop-while/label_break_value.rs166
1 files changed, 0 insertions, 166 deletions
diff --git a/src/test/ui/for-loop-while/label_break_value.rs b/src/test/ui/for-loop-while/label_break_value.rs
deleted file mode 100644
index 10992c505..000000000
--- a/src/test/ui/for-loop-while/label_break_value.rs
+++ /dev/null
@@ -1,166 +0,0 @@
-// run-pass
-#![allow(dead_code)]
-#![allow(unused_assignments)]
-
-// Test control flow to follow label_break_value semantics
-fn label_break(a: bool, b: bool) -> u32 {
- let mut v = 0;
- 'b: {
- v = 1;
- if a {
- break 'b;
- }
- v = 2;
- if b {
- break 'b;
- }
- v = 3;
- }
- return v;
-}
-
-// Test that values can be returned
-fn break_value(a: bool, b: bool) -> u32 {
- let result = 'block: {
- if a { break 'block 1; }
- if b { break 'block 2; }
- 3
- };
- result
-}
-
-// Test nesting of labeled blocks
-// here we only check that it compiles
-fn label_break_nested() {
- 'b: {
- println!("hi");
- if false {
- break 'b;
- }
- 'c: {
- if false {
- break 'b;
- }
- break 'c;
- }
- println!("hello");
- if true {
- break 'b;
- }
- }
-}
-
-// Tests for mixing labeled blocks with loop constructs
-// This function should be the identity function
-fn label_break_mixed(v: u32) -> u32 {
- let mut r = 0;
- 'b: {
- // Unlabeled break still works
- // (only crossing boundaries is an error)
- loop {
- break;
- }
- if v == 0 {
- break 'b;
- }
- // Labeled breaking an inner loop still works
- 'c: loop {
- if r == 1 {
- break 'c;
- }
- r += 1;
- }
- assert_eq!(r, 1);
- if v == 1 {
- break 'b;
- }
- // Labeled breaking an outer loop still works
- 'd: loop {
- {
- if v == r {
- break 'b;
- }
- if r == 5 {
- break 'd;
- }
- r += 1;
- }
- }
- assert_eq!(r, 5);
- assert!(v > r);
- // Here we test return from inside a labeled block
- return v;
- }
- r
-}
-
-fn label_break_match(c: u8, xe: u8, ye: i8) {
- let mut x = 0;
- let y = 'a: {
- match c {
- 0 => break 'a 0,
- v if { if v % 2 == 0 { break 'a 1; }; v % 3 == 0 } => { x += 1; },
- v if { 'b: { break 'b v == 5; } } => { x = 41; },
- _ => 'b: {
- break 'b ();
- },
- }
- x += 1;
- -1
- };
-
- assert_eq!(x, xe);
- assert_eq!(y, ye);
-}
-
-#[allow(unused_labels)]
-fn label_break_macro() {
- macro_rules! mac1 {
- ($target:lifetime, $val:expr) => {
- break $target $val;
- };
- }
- let x: u8 = 'a: {
- 'b: {
- mac1!('b, 1);
- };
- 0
- };
- assert_eq!(x, 0);
- let x: u8 = 'a: {
- 'b: {
- if true {
- mac1!('a, 1);
- }
- };
- 0
- };
- assert_eq!(x, 1);
-}
-
-pub fn main() {
- assert_eq!(label_break(true, false), 1);
- assert_eq!(label_break(false, true), 2);
- assert_eq!(label_break(false, false), 3);
-
- assert_eq!(break_value(true, false), 1);
- assert_eq!(break_value(false, true), 2);
- assert_eq!(break_value(false, false), 3);
-
- assert_eq!(label_break_mixed(0), 0);
- assert_eq!(label_break_mixed(1), 1);
- assert_eq!(label_break_mixed(2), 2);
- assert_eq!(label_break_mixed(3), 3);
- assert_eq!(label_break_mixed(4), 4);
- assert_eq!(label_break_mixed(5), 5);
- assert_eq!(label_break_mixed(6), 6);
-
- label_break_match(0, 0, 0);
- label_break_match(1, 1, -1);
- label_break_match(2, 0, 1);
- label_break_match(3, 2, -1);
- label_break_match(5, 42, -1);
- label_break_match(7, 1, -1);
-
- label_break_macro();
-}