summaryrefslogtreecommitdiffstats
path: root/tests/ui/lint/unused_labels.rs
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-17 12:18:58 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-17 12:18:58 +0000
commita4b7ed7a42c716ab9f05e351f003d589124fd55d (patch)
treeb620cd3f223850b28716e474e80c58059dca5dd4 /tests/ui/lint/unused_labels.rs
parentAdding upstream version 1.67.1+dfsg1. (diff)
downloadrustc-a4b7ed7a42c716ab9f05e351f003d589124fd55d.tar.xz
rustc-a4b7ed7a42c716ab9f05e351f003d589124fd55d.zip
Adding upstream version 1.68.2+dfsg1.upstream/1.68.2+dfsg1
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'tests/ui/lint/unused_labels.rs')
-rw-r--r--tests/ui/lint/unused_labels.rs85
1 files changed, 85 insertions, 0 deletions
diff --git a/tests/ui/lint/unused_labels.rs b/tests/ui/lint/unused_labels.rs
new file mode 100644
index 000000000..87a5392fd
--- /dev/null
+++ b/tests/ui/lint/unused_labels.rs
@@ -0,0 +1,85 @@
+// The output should warn when a loop label is not used. However, it
+// should also deal with the edge cases where a label is shadowed,
+// within nested loops
+
+// check-pass
+
+#![warn(unused_labels)]
+
+fn main() {
+ 'unused_while_label: while 0 == 0 {
+ //~^ WARN unused label
+ }
+
+ let opt = Some(0);
+ 'unused_while_let_label: while let Some(_) = opt {
+ //~^ WARN unused label
+ }
+
+ 'unused_for_label: for _ in 0..10 {
+ //~^ WARN unused label
+ }
+
+ 'used_loop_label: loop {
+ break 'used_loop_label;
+ }
+
+ 'used_loop_label_outer_1: for _ in 0..10 {
+ 'used_loop_label_inner_1: for _ in 0..10 {
+ break 'used_loop_label_inner_1;
+ }
+ break 'used_loop_label_outer_1;
+ }
+
+ 'used_loop_label_outer_2: for _ in 0..10 {
+ 'unused_loop_label_inner_2: for _ in 0..10 {
+ //~^ WARN unused label
+ break 'used_loop_label_outer_2;
+ }
+ }
+
+ 'unused_loop_label_outer_3: for _ in 0..10 {
+ //~^ WARN unused label
+ 'used_loop_label_inner_3: for _ in 0..10 {
+ break 'used_loop_label_inner_3;
+ }
+ }
+
+ // You should be able to break the same label many times
+ 'many_used: loop {
+ if true {
+ break 'many_used;
+ } else {
+ break 'many_used;
+ }
+ }
+
+ // Test breaking many times with the same inner label doesn't break the
+ // warning on the outer label
+ 'many_used_shadowed: for _ in 0..10 {
+ //~^ WARN unused label
+ 'many_used_shadowed: for _ in 0..10 {
+ //~^ WARN label name `'many_used_shadowed` shadows a label name that is already in scope
+ if 1 % 2 == 0 {
+ break 'many_used_shadowed;
+ } else {
+ break 'many_used_shadowed;
+ }
+ }
+ }
+
+ 'unused_loop_label: loop {
+ //~^ WARN unused label
+ break;
+ }
+
+ // Make sure unused block labels give warnings...
+ 'unused_block_label: {
+ //~^ WARN unused label
+ }
+
+ // ...and that used ones don't:
+ 'used_block_label: {
+ break 'used_block_label;
+ }
+}