diff options
| author | clubby789 <jamie@hill-daniel.co.uk> | 2023-02-21 16:11:48 +0000 |
|---|---|---|
| committer | clubby789 <jamie@hill-daniel.co.uk> | 2023-02-22 15:27:19 +0000 |
| commit | c7a4f387fdf3f5e021727db2a3c2976d3de02b25 (patch) | |
| tree | 7f884169695e0f490f70cb41f2a00d1185e1108a | |
| parent | bda32a4023b1d3f96e56e1b2fc7510324f430316 (diff) | |
| download | rust-c7a4f387fdf3f5e021727db2a3c2976d3de02b25.tar.gz rust-c7a4f387fdf3f5e021727db2a3c2976d3de02b25.zip | |
Lint dead code in closures
| -rw-r--r-- | compiler/rustc_passes/src/dead.rs | 3 | ||||
| -rw-r--r-- | tests/ui/lint/dead-code/in-closure.rs | 16 | ||||
| -rw-r--r-- | tests/ui/lint/dead-code/in-closure.stderr | 20 |
3 files changed, 39 insertions, 0 deletions
diff --git a/compiler/rustc_passes/src/dead.rs b/compiler/rustc_passes/src/dead.rs index 668c159f3cc..cfc91d636a7 100644 --- a/compiler/rustc_passes/src/dead.rs +++ b/compiler/rustc_passes/src/dead.rs @@ -395,6 +395,9 @@ impl<'tcx> Visitor<'tcx> for MarkSymbolVisitor<'tcx> { self.mark_as_used_if_union(*adt, fields); } } + hir::ExprKind::Closure(cls) => { + self.insert_def_id(cls.def_id.to_def_id()); + } _ => (), } diff --git a/tests/ui/lint/dead-code/in-closure.rs b/tests/ui/lint/dead-code/in-closure.rs new file mode 100644 index 00000000000..c55634405ed --- /dev/null +++ b/tests/ui/lint/dead-code/in-closure.rs @@ -0,0 +1,16 @@ +// edition: 2021 + +#![deny(dead_code)] + +pub fn foo() { + let closure = || { + fn a() {} //~ ERROR function `a` is never used + }; + closure() +} + +pub async fn async_foo() { + const A: usize = 1; //~ ERROR constant `A` is never used +} + +fn main() {} diff --git a/tests/ui/lint/dead-code/in-closure.stderr b/tests/ui/lint/dead-code/in-closure.stderr new file mode 100644 index 00000000000..deb276be702 --- /dev/null +++ b/tests/ui/lint/dead-code/in-closure.stderr @@ -0,0 +1,20 @@ +error: function `a` is never used + --> $DIR/in-closure.rs:7:12 + | +LL | fn a() {} + | ^ + | +note: the lint level is defined here + --> $DIR/in-closure.rs:3:9 + | +LL | #![deny(dead_code)] + | ^^^^^^^^^ + +error: constant `A` is never used + --> $DIR/in-closure.rs:13:11 + | +LL | const A: usize = 1; + | ^ + +error: aborting due to 2 previous errors + |
