]> git.lizzy.rs Git - rust.git/commitdiff
Avoid emitting redundant "unused label" lint
authorEsteban Küber <esteban@kuber.com.ar>
Thu, 21 Jan 2021 01:57:47 +0000 (17:57 -0800)
committerEsteban Küber <esteban@kuber.com.ar>
Fri, 22 Jan 2021 05:41:46 +0000 (21:41 -0800)
compiler/rustc_resolve/src/late/diagnostics.rs
src/test/ui/label/label_misspelled.rs
src/test/ui/label/label_misspelled.stderr
src/test/ui/label/label_misspelled_2.rs
src/test/ui/label/label_misspelled_2.stderr

index f8f81c9128772bb912d12b39d8d6b73e229b9ded..bed7a350ea86daf6f721258a0d8543039653d94d 100644 (file)
@@ -545,7 +545,7 @@ pub(crate) fn smart_resolve_report_errors(
         if let Some(err_code) = &err.code {
             if err_code == &rustc_errors::error_code!(E0425) {
                 for label_rib in &self.label_ribs {
-                    for (label_ident, _) in &label_rib.bindings {
+                    for (label_ident, node_id) in &label_rib.bindings {
                         if format!("'{}", ident) == label_ident.to_string() {
                             err.span_label(label_ident.span, "a label with a similar name exists");
                             if let PathSource::Expr(Some(Expr {
@@ -559,6 +559,8 @@ pub(crate) fn smart_resolve_report_errors(
                                     label_ident.name.to_string(),
                                     Applicability::MaybeIncorrect,
                                 );
+                                // Do not lint against unused label when we suggest them.
+                                self.diagnostic_metadata.unused_labels.remove(node_id);
                             }
                         }
                     }
index 33619987fefe2e751b2d51bc5a4f2deaa6f10079..e3180b06ecb2bfa33694e7c94c64efde0a8d801e 100644 (file)
@@ -25,22 +25,18 @@ fn main() {
 
 fn foo() {
     'LOOP: loop {
-        //~^ WARN unused label
         break LOOP;
         //~^ ERROR cannot find value `LOOP` in this scope
     };
     'while_loop: while true { //~ WARN denote infinite loops with
-        //~^ WARN unused label
         break while_loop;
         //~^ ERROR cannot find value `while_loop` in this scope
     };
     'while_let: while let Some(_) = Some(()) {
-        //~^ WARN unused label
         break while_let;
         //~^ ERROR cannot find value `while_let` in this scope
     }
     'for_loop: for _ in 0..3 {
-        //~^ WARN unused label
         break for_loop;
         //~^ ERROR cannot find value `for_loop` in this scope
     };
index 817eac8256ffc62eaf1cae8d0fee6aa64413fb50..b09695787a443ae6108a5c200d15c00352c66e55 100644 (file)
@@ -35,11 +35,10 @@ LL |         LOOP;
    |         ^^^^ not found in this scope
 
 error[E0425]: cannot find value `LOOP` in this scope
-  --> $DIR/label_misspelled.rs:29:15
+  --> $DIR/label_misspelled.rs:28:15
    |
 LL |     'LOOP: loop {
    |     ----- a label with a similar name exists
-LL |
 LL |         break LOOP;
    |               ^^^^
    |               |
@@ -47,11 +46,10 @@ LL |         break LOOP;
    |               help: use the similarly named label: `'LOOP`
 
 error[E0425]: cannot find value `while_loop` in this scope
-  --> $DIR/label_misspelled.rs:34:15
+  --> $DIR/label_misspelled.rs:32:15
    |
 LL |     'while_loop: while true {
    |     ----------- a label with a similar name exists
-LL |
 LL |         break while_loop;
    |               ^^^^^^^^^^
    |               |
@@ -59,11 +57,10 @@ LL |         break while_loop;
    |               help: use the similarly named label: `'while_loop`
 
 error[E0425]: cannot find value `while_let` in this scope
-  --> $DIR/label_misspelled.rs:39:15
+  --> $DIR/label_misspelled.rs:36:15
    |
 LL |     'while_let: while let Some(_) = Some(()) {
    |     ---------- a label with a similar name exists
-LL |
 LL |         break while_let;
    |               ^^^^^^^^^
    |               |
@@ -71,11 +68,10 @@ LL |         break while_let;
    |               help: use the similarly named label: `'while_let`
 
 error[E0425]: cannot find value `for_loop` in this scope
-  --> $DIR/label_misspelled.rs:44:15
+  --> $DIR/label_misspelled.rs:40:15
    |
 LL |     'for_loop: for _ in 0..3 {
    |     --------- a label with a similar name exists
-LL |
 LL |         break for_loop;
    |               ^^^^^^^^
    |               |
@@ -120,62 +116,38 @@ warning: unused label
 LL |     'LOOP: loop {
    |     ^^^^^
 
-warning: unused label
-  --> $DIR/label_misspelled.rs:27:5
-   |
-LL |     'LOOP: loop {
-   |     ^^^^^
-
-warning: unused label
-  --> $DIR/label_misspelled.rs:32:5
-   |
-LL |     'while_loop: while true {
-   |     ^^^^^^^^^^^
-
 warning: denote infinite loops with `loop { ... }`
-  --> $DIR/label_misspelled.rs:32:5
+  --> $DIR/label_misspelled.rs:31:5
    |
 LL |     'while_loop: while true {
    |     ^^^^^^^^^^^^^^^^^^^^^^^ help: use `loop`
 
 warning: unused label
-  --> $DIR/label_misspelled.rs:37:5
-   |
-LL |     'while_let: while let Some(_) = Some(()) {
-   |     ^^^^^^^^^^
-
-warning: unused label
-  --> $DIR/label_misspelled.rs:42:5
-   |
-LL |     'for_loop: for _ in 0..3 {
-   |     ^^^^^^^^^
-
-warning: unused label
-  --> $DIR/label_misspelled.rs:51:5
+  --> $DIR/label_misspelled.rs:47:5
    |
 LL |     'while_loop: while true {
    |     ^^^^^^^^^^^
 
 warning: denote infinite loops with `loop { ... }`
-  --> $DIR/label_misspelled.rs:51:5
+  --> $DIR/label_misspelled.rs:47:5
    |
 LL |     'while_loop: while true {
    |     ^^^^^^^^^^^^^^^^^^^^^^^ help: use `loop`
 
 warning: unused label
-  --> $DIR/label_misspelled.rs:56:5
+  --> $DIR/label_misspelled.rs:52:5
    |
 LL |     'while_let: while let Some(_) = Some(()) {
    |     ^^^^^^^^^^
 
 warning: unused label
-  --> $DIR/label_misspelled.rs:61:5
+  --> $DIR/label_misspelled.rs:57:5
    |
 LL |     'for_loop: for _ in 0..3 {
    |     ^^^^^^^^^
 
 error[E0571]: `break` with value from a `while` loop
-  --> $DIR/label_misspelled.rs:53:9
+  --> $DIR/label_misspelled.rs:49:9
    |
 LL |     'while_loop: while true {
    |     ----------------------- you can't `break` with a value in a `while` loop
@@ -193,7 +165,7 @@ LL |         break 'while_loop;
    |               ^^^^^^^^^^^
 
 error[E0571]: `break` with value from a `while` loop
-  --> $DIR/label_misspelled.rs:58:9
+  --> $DIR/label_misspelled.rs:54:9
    |
 LL |     'while_let: while let Some(_) = Some(()) {
    |     ---------------------------------------- you can't `break` with a value in a `while` loop
@@ -211,7 +183,7 @@ LL |         break 'while_let;
    |               ^^^^^^^^^^
 
 error[E0571]: `break` with value from a `for` loop
-  --> $DIR/label_misspelled.rs:63:9
+  --> $DIR/label_misspelled.rs:59:9
    |
 LL |     'for_loop: for _ in 0..3 {
    |     ------------------------ you can't `break` with a value in a `for` loop
@@ -228,7 +200,7 @@ help: alternatively, you might have meant to use the available loop label
 LL |         break 'for_loop;
    |               ^^^^^^^^^
 
-error: aborting due to 11 previous errors; 14 warnings emitted
+error: aborting due to 11 previous errors; 10 warnings emitted
 
 Some errors have detailed explanations: E0425, E0571.
 For more information about an error, try `rustc --explain E0425`.
index 7fa101dbdf899e6e1c3c457e6026c2c72634c6ad..28bfe6f26cf0887633c3d1098a06ead5813927f7 100644 (file)
@@ -5,7 +5,6 @@ fn main() {
         break 'a;
     }
     'b: for _ in 0..1 {
-        //~^ WARN unused label
         break b; //~ ERROR cannot find value `b` in this scope
     }
     c: for _ in 0..1 { //~ ERROR expected identifier, found keyword `for`
index b56896a77ed35bbd0a814245cb9243d9a0d089ad..c1921b952745f775c164b1af5c6d8307b854be24 100644 (file)
@@ -1,11 +1,11 @@
 error: expected identifier, found keyword `for`
-  --> $DIR/label_misspelled_2.rs:11:8
+  --> $DIR/label_misspelled_2.rs:10:8
    |
 LL |     c: for _ in 0..1 {
    |        ^^^ expected identifier, found keyword
 
 error: expected `<`, found reserved identifier `_`
-  --> $DIR/label_misspelled_2.rs:11:12
+  --> $DIR/label_misspelled_2.rs:10:12
    |
 LL |     c: for _ in 0..1 {
    |      -     ^ expected `<`
@@ -16,29 +16,16 @@ LL |     c: for _ in 0..1 {
    = note: see issue #23416 <https://github.com/rust-lang/rust/issues/23416> for more information
 
 error[E0425]: cannot find value `b` in this scope
-  --> $DIR/label_misspelled_2.rs:9:15
+  --> $DIR/label_misspelled_2.rs:8:15
    |
 LL |     'b: for _ in 0..1 {
    |     -- a label with a similar name exists
-LL |
 LL |         break b;
    |               ^
    |               |
    |               not found in this scope
    |               help: use the similarly named label: `'b`
 
-warning: unused label
-  --> $DIR/label_misspelled_2.rs:7:5
-   |
-LL |     'b: for _ in 0..1 {
-   |     ^^
-   |
-note: the lint level is defined here
-  --> $DIR/label_misspelled_2.rs:1:9
-   |
-LL | #![warn(unused_labels)]
-   |         ^^^^^^^^^^^^^
-
-error: aborting due to 3 previous errors; 1 warning emitted
+error: aborting due to 3 previous errors
 
 For more information about this error, try `rustc --explain E0425`.