Skip to content

Commit

Permalink
Properly account for non-shorthand pattern field in unused variable lint
Browse files Browse the repository at this point in the history
  • Loading branch information
estebank committed Feb 25, 2021
1 parent a8486b6 commit fb24a10
Show file tree
Hide file tree
Showing 4 changed files with 56 additions and 5 deletions.
15 changes: 10 additions & 5 deletions compiler/rustc_passes/src/liveness.rs
Original file line number Diff line number Diff line change
Expand Up @@ -367,12 +367,17 @@ impl<'tcx> Visitor<'tcx> for IrMaps<'tcx> {
}

fn visit_param(&mut self, param: &'tcx hir::Param<'tcx>) {
let is_shorthand = matches!(param.pat.kind, rustc_hir::PatKind::Struct(..));
param.pat.each_binding(|_bm, hir_id, _x, ident| {
let var = if is_shorthand {
Local(LocalInfo { id: hir_id, name: ident.name, is_shorthand: true })
} else {
Param(hir_id, ident.name)
let var = match param.pat.kind {
rustc_hir::PatKind::Struct(_, fields, _) => Local(LocalInfo {
id: hir_id,
name: ident.name,
is_shorthand: fields
.iter()
.find(|f| f.ident == ident)
.map_or(false, |f| f.is_shorthand),
}),
_ => Param(hir_id, ident.name),
};
self.add_variable(var);
});
Expand Down
16 changes: 16 additions & 0 deletions src/test/ui/lint/unused_variables-issue-82488.fixed
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
// run-rustfix
#![deny(unused_variables)]

struct Point {
x: u32,
y: u32
}

fn process_point(Point { x, y: _renamed }: Point) {
//~^ ERROR unused variable: `renamed`
let _ = x;
}

fn main() {
process_point(Point { x: 0, y: 0 });
}
16 changes: 16 additions & 0 deletions src/test/ui/lint/unused_variables-issue-82488.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
// run-rustfix
#![deny(unused_variables)]

struct Point {
x: u32,
y: u32
}

fn process_point(Point { x, y: renamed }: Point) {
//~^ ERROR unused variable: `renamed`
let _ = x;
}

fn main() {
process_point(Point { x: 0, y: 0 });
}
14 changes: 14 additions & 0 deletions src/test/ui/lint/unused_variables-issue-82488.stderr
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
error: unused variable: `renamed`
--> $DIR/unused_variables-issue-82488.rs:9:32
|
LL | fn process_point(Point { x, y: renamed }: Point) {
| ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_renamed`
|
note: the lint level is defined here
--> $DIR/unused_variables-issue-82488.rs:2:9
|
LL | #![deny(unused_variables)]
| ^^^^^^^^^^^^^^^^

error: aborting due to previous error

0 comments on commit fb24a10

Please sign in to comment.