about summary refs log tree commit diff
diff options
context:
space:
mode:
authorMichael Howell <michael@notriddle.com>2022-11-23 17:57:11 -0700
committerMichael Howell <michael@notriddle.com>2022-11-23 17:57:11 -0700
commit97d95d48e2ef72d9ededeb5821f0bfcbd8fcf7c6 (patch)
tree51f811f73608b003a16d803f24ac0a1f86dcf674
parent80b3c6dbde3ff89a44f8eaa63e08054398b30ecd (diff)
downloadrust-97d95d48e2ef72d9ededeb5821f0bfcbd8fcf7c6.tar.gz
rust-97d95d48e2ef72d9ededeb5821f0bfcbd8fcf7c6.zip
lint: do not warn unused parens around higher-ranked function pointers
Fixes #104397
-rw-r--r--compiler/rustc_lint/src/unused.rs1
-rw-r--r--src/test/ui/lint/unused/issue-104397.rs18
2 files changed, 19 insertions, 0 deletions
diff --git a/compiler/rustc_lint/src/unused.rs b/compiler/rustc_lint/src/unused.rs
index 0471890230a..21a060a36d2 100644
--- a/compiler/rustc_lint/src/unused.rs
+++ b/compiler/rustc_lint/src/unused.rs
@@ -1002,6 +1002,7 @@ impl EarlyLintPass for UnusedParens {
         if let ast::TyKind::Paren(r) = &ty.kind {
             match &r.kind {
                 ast::TyKind::TraitObject(..) => {}
+                ast::TyKind::BareFn(b) if b.generic_params.len() > 0 => {}
                 ast::TyKind::ImplTrait(_, bounds) if bounds.len() > 1 => {}
                 ast::TyKind::Array(_, len) => {
                     self.check_unused_delims_expr(
diff --git a/src/test/ui/lint/unused/issue-104397.rs b/src/test/ui/lint/unused/issue-104397.rs
new file mode 100644
index 00000000000..94e15cd96bc
--- /dev/null
+++ b/src/test/ui/lint/unused/issue-104397.rs
@@ -0,0 +1,18 @@
+// check-pass
+
+#![warn(unused)]
+#![deny(warnings)]
+
+struct Inv<'a>(&'a mut &'a ());
+
+trait Trait {}
+impl Trait for for<'a> fn(Inv<'a>) {}
+
+fn with_bound()
+where
+    (for<'a> fn(Inv<'a>)): Trait,
+{}
+
+fn main() {
+    with_bound();
+}