about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--src/librustc_lint/unused.rs1
-rw-r--r--src/test/ui/lint/issue-74883-unused-paren-baren-yield.rs17
-rw-r--r--src/test/ui/lint/issue-74883-unused-paren-baren-yield.stderr26
3 files changed, 44 insertions, 0 deletions
diff --git a/src/librustc_lint/unused.rs b/src/librustc_lint/unused.rs
index 8d8fb8c3c60..ee27b358449 100644
--- a/src/librustc_lint/unused.rs
+++ b/src/librustc_lint/unused.rs
@@ -425,6 +425,7 @@ trait UnusedDelimLint {
                     ExprKind::Ret(_) | ExprKind::Break(..) => true,
                     _ => parser::contains_exterior_struct_lit(&inner),
                 })
+            || if let ExprKind::Yield(..) = inner.kind { true } else { false }
     }
 
     fn emit_unused_delims_expr(
diff --git a/src/test/ui/lint/issue-74883-unused-paren-baren-yield.rs b/src/test/ui/lint/issue-74883-unused-paren-baren-yield.rs
new file mode 100644
index 00000000000..3d9eebe65c0
--- /dev/null
+++ b/src/test/ui/lint/issue-74883-unused-paren-baren-yield.rs
@@ -0,0 +1,17 @@
+#![feature(generator_trait)]
+#![feature(generators)]
+#![deny(unused_braces, unused_parens)]
+
+use std::ops::Generator;
+use std::pin::Pin;
+
+fn main() {
+    let mut x = |_| {
+        while let Some(_) = (yield) {}
+        while let Some(_) = {yield} {}
+        // Only warn these cases
+        while let Some(_) = ({yield}) {} //~ ERROR: unnecessary parentheses
+        while let Some(_) = {(yield)} {} //~ ERROR: unnecessary braces
+    };
+    let _ = Pin::new(&mut x).resume(Some(5));
+}
diff --git a/src/test/ui/lint/issue-74883-unused-paren-baren-yield.stderr b/src/test/ui/lint/issue-74883-unused-paren-baren-yield.stderr
new file mode 100644
index 00000000000..fab22e24d50
--- /dev/null
+++ b/src/test/ui/lint/issue-74883-unused-paren-baren-yield.stderr
@@ -0,0 +1,26 @@
+error: unnecessary parentheses around `let` scrutinee expression
+  --> $DIR/issue-74883-unused-paren-baren-yield.rs:13:29
+   |
+LL |         while let Some(_) = ({yield}) {}
+   |                             ^^^^^^^^^ help: remove these parentheses
+   |
+note: the lint level is defined here
+  --> $DIR/issue-74883-unused-paren-baren-yield.rs:3:24
+   |
+LL | #![deny(unused_braces, unused_parens)]
+   |                        ^^^^^^^^^^^^^
+
+error: unnecessary braces around `let` scrutinee expression
+  --> $DIR/issue-74883-unused-paren-baren-yield.rs:14:29
+   |
+LL |         while let Some(_) = {(yield)} {}
+   |                             ^^^^^^^^^ help: remove these braces
+   |
+note: the lint level is defined here
+  --> $DIR/issue-74883-unused-paren-baren-yield.rs:3:9
+   |
+LL | #![deny(unused_braces, unused_parens)]
+   |         ^^^^^^^^^^^^^
+
+error: aborting due to 2 previous errors
+