]>
git.proxmox.com Git - rustc.git/blob - src/test/ui/for-loop-while/label_break_value.rs
3 #![allow(unused_assignments)]
4 #![feature(label_break_value)]
6 // Test control flow to follow label_break_value semantics
7 fn label_break(a
: bool
, b
: bool
) -> u32 {
23 // Test that values can be returned
24 fn break_value(a
: bool
, b
: bool
) -> u32 {
25 let result
= 'block
: {
26 if a { break 'block 1; }
27 if b { break 'block 2; }
33 // Test nesting of labeled blocks
34 // here we only check that it compiles
35 fn label_break_nested() {
54 // Tests for mixing labeled blocks with loop constructs
55 // This function should be the identity function
56 fn label_break_mixed(v
: u32) -> u32 {
59 // Unlabeled break still works
60 // (only crossing boundaries is an error)
67 // Labeled breaking an inner loop still works
78 // Labeled breaking an outer loop still works
92 // Here we test return from inside a labeled block
99 assert_eq
!(label_break(true, false), 1);
100 assert_eq
!(label_break(false, true), 2);
101 assert_eq
!(label_break(false, false), 3);
103 assert_eq
!(break_value(true, false), 1);
104 assert_eq
!(break_value(false, true), 2);
105 assert_eq
!(break_value(false, false), 3);
107 assert_eq
!(label_break_mixed(0), 0);
108 assert_eq
!(label_break_mixed(1), 1);
109 assert_eq
!(label_break_mixed(2), 2);
110 assert_eq
!(label_break_mixed(3), 3);
111 assert_eq
!(label_break_mixed(4), 4);
112 assert_eq
!(label_break_mixed(5), 5);
113 assert_eq
!(label_break_mixed(6), 6);
115 // FIXME: ensure that labeled blocks work if produced by macros and in match arms