1 #![feature(never_type)]
2 #![allow(unreachable_code)]
12 let value = 'outer: loop {
16 let _never: ! = loop {
18 break 'outer panic!();
23 assert_eq!(value, 13);
28 let coerced: &[_] = loop {
36 assert_eq!(coerced, &[17u32]);
38 let trait_unified = loop {
39 break if true { break Default::default() } else { break [13, 14] };
41 assert_eq!(trait_unified, [0, 0]);
43 let trait_unified_2 = loop {
45 break [String::from("Hello")];
47 break Default::default();
50 // compare lengths; ptr comparison is not deterministic
51 assert_eq!(trait_unified_2.len(), 1);
52 assert_eq!(trait_unified_2[0].len(), 0);
54 let trait_unified_3 = loop {
55 break if false { break [String::from("Hello")] } else { ["Yes".into()] };
57 assert_eq!(trait_unified_3, ["Yes"]);
59 let regular_break = loop {
63 break break Default::default();
66 assert_eq!(regular_break, ());
68 let regular_break_2 = loop {
70 break Default::default();
75 assert_eq!(regular_break_2, ());
77 let regular_break_3 = loop {
84 assert_eq!(regular_break_3, ());
86 let regular_break_4 = loop {
90 assert_eq!(regular_break_4, ());
92 let regular_break_5 = loop {
96 assert_eq!(regular_break_5, ());
98 let nested_break_value = 'outer2: loop {
99 let _a: u32 = 'inner: loop {
101 break 'outer2 "hello";
108 assert_eq!(nested_break_value, "hello");
110 let break_from_while_cond = loop {
111 'inner_loop: while break 'inner_loop {
116 assert_eq!(break_from_while_cond, 123);
118 let break_from_while_to_outer = 'outer_loop: loop {
119 while break 'outer_loop 567 {
120 panic!("from_inner");
122 panic!("from outer");
124 assert_eq!(break_from_while_to_outer, 567);