about summary refs log tree commit diff
path: root/tests/ui/parser/lifetime_starts_expressions.rs
diff options
context:
space:
mode:
Diffstat (limited to 'tests/ui/parser/lifetime_starts_expressions.rs')
-rw-r--r--tests/ui/parser/lifetime_starts_expressions.rs39
1 files changed, 39 insertions, 0 deletions
diff --git a/tests/ui/parser/lifetime_starts_expressions.rs b/tests/ui/parser/lifetime_starts_expressions.rs
new file mode 100644
index 00000000000..903b4de6ef4
--- /dev/null
+++ b/tests/ui/parser/lifetime_starts_expressions.rs
@@ -0,0 +1,39 @@
+#![allow(unused, dead_code)]
+
+fn foo() -> u32 {
+    return 'label: loop { break 'label 42; };
+}
+
+fn bar() -> u32 {
+    loop { break 'label: loop { break 'label 42; }; }
+    //~^ ERROR: parentheses are required around this expression to avoid confusion
+    //~| HELP: wrap the expression in parentheses
+}
+
+fn baz() -> u32 {
+    'label: loop {
+        break 'label
+        //~^ WARNING: this labeled break expression is easy to confuse with an unlabeled break
+            loop { break 42; };
+            //~^ HELP: wrap this expression in parentheses
+    };
+
+    'label2: loop {
+        break 'label2 'inner: loop { break 42; };
+        // no warnings or errors here
+    }
+}
+
+pub fn main() {
+    // Regression test for issue #86948, as resolved in #87026:
+    let a = 'first_loop: loop {
+        break 'first_loop 1;
+    };
+    let b = loop {
+        break 'inner_loop: loop {
+        //~^ ERROR: parentheses are required around this expression to avoid confusion
+        //~| HELP: wrap the expression in parentheses
+            break 'inner_loop 1;
+        };
+    };
+}