Skip to content

Commit 4bb07be

Browse files
committed
Visit attributes in one go.
1 parent 8e81605 commit 4bb07be

File tree

3 files changed

+31
-40
lines changed

3 files changed

+31
-40
lines changed

compiler/rustc_hir/src/intravisit.rs

Lines changed: 4 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -476,14 +476,15 @@ pub trait Visitor<'v>: Sized {
476476
/// Walks the contents of a crate. See also `Crate::visit_all_items`.
477477
pub fn walk_crate<'v, V: Visitor<'v>>(visitor: &mut V, krate: &'v Crate<'v>) {
478478
visitor.visit_mod(&krate.item.module, krate.item.span, CRATE_HIR_ID);
479-
walk_list!(visitor, visit_attribute, krate.item.attrs);
480479
walk_list!(visitor, visit_macro_def, krate.exported_macros);
480+
for attr in krate.attrs.iter().flat_map(|l| *l) {
481+
visitor.visit_attribute(attr)
482+
}
481483
}
482484

483485
pub fn walk_macro_def<'v, V: Visitor<'v>>(visitor: &mut V, macro_def: &'v MacroDef<'v>) {
484486
visitor.visit_id(macro_def.hir_id());
485487
visitor.visit_ident(macro_def.ident);
486-
walk_list!(visitor, visit_attribute, macro_def.attrs);
487488
}
488489

489490
pub fn walk_mod<'v, V: Visitor<'v>>(visitor: &mut V, module: &'v Mod<'v>, mod_hir_id: HirId) {
@@ -502,7 +503,6 @@ pub fn walk_local<'v, V: Visitor<'v>>(visitor: &mut V, local: &'v Local<'v>) {
502503
// Intentionally visiting the expr first - the initialization expr
503504
// dominates the local's definition.
504505
walk_list!(visitor, visit_expr, &local.init);
505-
walk_list!(visitor, visit_attribute, local.attrs.iter());
506506
visitor.visit_id(local.hir_id);
507507
visitor.visit_pat(&local.pat);
508508
walk_list!(visitor, visit_ty, &local.ty);
@@ -549,7 +549,6 @@ pub fn walk_trait_ref<'v, V: Visitor<'v>>(visitor: &mut V, trait_ref: &'v TraitR
549549
pub fn walk_param<'v, V: Visitor<'v>>(visitor: &mut V, param: &'v Param<'v>) {
550550
visitor.visit_id(param.hir_id);
551551
visitor.visit_pat(&param.pat);
552-
walk_list!(visitor, visit_attribute, param.attrs);
553552
}
554553

555554
pub fn walk_item<'v, V: Visitor<'v>>(visitor: &mut V, item: &'v Item<'v>) {
@@ -644,7 +643,6 @@ pub fn walk_item<'v, V: Visitor<'v>>(visitor: &mut V, item: &'v Item<'v>) {
644643
walk_list!(visitor, visit_param_bound, bounds);
645644
}
646645
}
647-
walk_list!(visitor, visit_attribute, item.attrs);
648646
}
649647

650648
pub fn walk_use<'v, V: Visitor<'v>>(visitor: &mut V, path: &'v Path<'v>, hir_id: HirId) {
@@ -678,7 +676,6 @@ pub fn walk_variant<'v, V: Visitor<'v>>(
678676
variant.span,
679677
);
680678
walk_list!(visitor, visit_anon_const, &variant.disr_expr);
681-
walk_list!(visitor, visit_attribute, variant.attrs);
682679
}
683680

684681
pub fn walk_ty<'v, V: Visitor<'v>>(visitor: &mut V, typ: &'v Ty<'v>) {
@@ -843,8 +840,6 @@ pub fn walk_foreign_item<'v, V: Visitor<'v>>(visitor: &mut V, foreign_item: &'v
843840
ForeignItemKind::Static(ref typ, _) => visitor.visit_ty(typ),
844841
ForeignItemKind::Type => (),
845842
}
846-
847-
walk_list!(visitor, visit_attribute, foreign_item.attrs);
848843
}
849844

850845
pub fn walk_param_bound<'v, V: Visitor<'v>>(visitor: &mut V, bound: &'v GenericBound<'v>) {
@@ -862,7 +857,6 @@ pub fn walk_param_bound<'v, V: Visitor<'v>>(visitor: &mut V, bound: &'v GenericB
862857

863858
pub fn walk_generic_param<'v, V: Visitor<'v>>(visitor: &mut V, param: &'v GenericParam<'v>) {
864859
visitor.visit_id(param.hir_id);
865-
walk_list!(visitor, visit_attribute, param.attrs);
866860
match param.name {
867861
ParamName::Plain(ident) => visitor.visit_ident(ident),
868862
ParamName::Error | ParamName::Fresh(_) => {}
@@ -952,7 +946,6 @@ pub fn walk_fn<'v, V: Visitor<'v>>(
952946

953947
pub fn walk_trait_item<'v, V: Visitor<'v>>(visitor: &mut V, trait_item: &'v TraitItem<'v>) {
954948
visitor.visit_ident(trait_item.ident);
955-
walk_list!(visitor, visit_attribute, trait_item.attrs);
956949
visitor.visit_generics(&trait_item.generics);
957950
match trait_item.kind {
958951
TraitItemKind::Const(ref ty, default) => {
@@ -1000,7 +993,7 @@ pub fn walk_impl_item<'v, V: Visitor<'v>>(visitor: &mut V, impl_item: &'v ImplIt
1000993
ident,
1001994
ref vis,
1002995
ref defaultness,
1003-
attrs,
996+
attrs: _,
1004997
ref generics,
1005998
ref kind,
1006999
span: _,
@@ -1009,7 +1002,6 @@ pub fn walk_impl_item<'v, V: Visitor<'v>>(visitor: &mut V, impl_item: &'v ImplIt
10091002
visitor.visit_ident(ident);
10101003
visitor.visit_vis(vis);
10111004
visitor.visit_defaultness(defaultness);
1012-
walk_list!(visitor, visit_attribute, attrs);
10131005
visitor.visit_generics(generics);
10141006
match *kind {
10151007
ImplItemKind::Const(ref ty, body) => {
@@ -1067,7 +1059,6 @@ pub fn walk_struct_field<'v, V: Visitor<'v>>(visitor: &mut V, struct_field: &'v
10671059
visitor.visit_vis(&struct_field.vis);
10681060
visitor.visit_ident(struct_field.ident);
10691061
visitor.visit_ty(&struct_field.ty);
1070-
walk_list!(visitor, visit_attribute, struct_field.attrs);
10711062
}
10721063

10731064
pub fn walk_block<'v, V: Visitor<'v>>(visitor: &mut V, block: &'v Block<'v>) {
@@ -1094,7 +1085,6 @@ pub fn walk_anon_const<'v, V: Visitor<'v>>(visitor: &mut V, constant: &'v AnonCo
10941085

10951086
pub fn walk_expr<'v, V: Visitor<'v>>(visitor: &mut V, expression: &'v Expr<'v>) {
10961087
visitor.visit_id(expression.hir_id);
1097-
walk_list!(visitor, visit_attribute, expression.attrs.iter());
10981088
match expression.kind {
10991089
ExprKind::Box(ref subexpression) => visitor.visit_expr(subexpression),
11001090
ExprKind::Array(subexpressions) => {
@@ -1238,7 +1228,6 @@ pub fn walk_arm<'v, V: Visitor<'v>>(visitor: &mut V, arm: &'v Arm<'v>) {
12381228
}
12391229
}
12401230
visitor.visit_expr(&arm.body);
1241-
walk_list!(visitor, visit_attribute, arm.attrs);
12421231
}
12431232

12441233
pub fn walk_vis<'v, V: Visitor<'v>>(visitor: &mut V, vis: &'v Visibility<'v>) {

compiler/rustc_lint/src/unused.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -406,6 +406,8 @@ impl<'tcx> LateLintPass<'tcx> for UnusedAttributes {
406406
if !cx.sess().is_attr_used(attr) {
407407
debug!("emitting warning for: {:?}", attr);
408408
cx.struct_span_lint(UNUSED_ATTRIBUTES, attr.span, |lint| {
409+
// Mark as used to avoid duplicate warnings.
410+
cx.sess().mark_attr_used(attr);
409411
lint.build("unused attribute").emit()
410412
});
411413
// Is it a builtin attribute that must be used at the crate level?

src/test/ui/unused/unused-attr.stderr

Lines changed: 25 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
error: unused attribute
2-
--> $DIR/unused-attr.rs:6:1
2+
--> $DIR/unused-attr.rs:4:1
33
|
4-
LL | #[rustc_dummy]
5-
| ^^^^^^^^^^^^^^
4+
LL | #![rustc_dummy]
5+
| ^^^^^^^^^^^^^^^
66
|
77
note: the lint level is defined here
88
--> $DIR/unused-attr.rs:1:9
@@ -11,16 +11,16 @@ LL | #![deny(unused_attributes)]
1111
| ^^^^^^^^^^^^^^^^^
1212

1313
error: unused attribute
14-
--> $DIR/unused-attr.rs:9:1
14+
--> $DIR/unused-attr.rs:6:1
1515
|
1616
LL | #[rustc_dummy]
1717
| ^^^^^^^^^^^^^^
1818

1919
error: unused attribute
20-
--> $DIR/unused-attr.rs:14:5
20+
--> $DIR/unused-attr.rs:9:1
2121
|
22-
LL | #[rustc_dummy]
23-
| ^^^^^^^^^^^^^^
22+
LL | #[rustc_dummy]
23+
| ^^^^^^^^^^^^^^
2424

2525
error: unused attribute
2626
--> $DIR/unused-attr.rs:12:1
@@ -29,10 +29,16 @@ LL | #[rustc_dummy]
2929
| ^^^^^^^^^^^^^^
3030

3131
error: unused attribute
32-
--> $DIR/unused-attr.rs:22:9
32+
--> $DIR/unused-attr.rs:14:5
3333
|
34-
LL | #[rustc_dummy]
35-
| ^^^^^^^^^^^^^^
34+
LL | #[rustc_dummy]
35+
| ^^^^^^^^^^^^^^
36+
37+
error: unused attribute
38+
--> $DIR/unused-attr.rs:18:1
39+
|
40+
LL | #[rustc_dummy]
41+
| ^^^^^^^^^^^^^^
3642

3743
error: unused attribute
3844
--> $DIR/unused-attr.rs:20:5
@@ -41,7 +47,13 @@ LL | #[rustc_dummy]
4147
| ^^^^^^^^^^^^^^
4248

4349
error: unused attribute
44-
--> $DIR/unused-attr.rs:18:1
50+
--> $DIR/unused-attr.rs:22:9
51+
|
52+
LL | #[rustc_dummy]
53+
| ^^^^^^^^^^^^^^
54+
55+
error: unused attribute
56+
--> $DIR/unused-attr.rs:27:1
4557
|
4658
LL | #[rustc_dummy]
4759
| ^^^^^^^^^^^^^^
@@ -53,7 +65,7 @@ LL | #[rustc_dummy]
5365
| ^^^^^^^^^^^^^^
5466

5567
error: unused attribute
56-
--> $DIR/unused-attr.rs:27:1
68+
--> $DIR/unused-attr.rs:35:1
5769
|
5870
LL | #[rustc_dummy]
5971
| ^^^^^^^^^^^^^^
@@ -65,7 +77,7 @@ LL | #[rustc_dummy]
6577
| ^^^^^^^^^^^^^^
6678

6779
error: unused attribute
68-
--> $DIR/unused-attr.rs:35:1
80+
--> $DIR/unused-attr.rs:41:1
6981
|
7082
LL | #[rustc_dummy]
7183
| ^^^^^^^^^^^^^^
@@ -82,17 +94,5 @@ error: unused attribute
8294
LL | #[rustc_dummy]
8395
| ^^^^^^^^^^^^^^
8496

85-
error: unused attribute
86-
--> $DIR/unused-attr.rs:41:1
87-
|
88-
LL | #[rustc_dummy]
89-
| ^^^^^^^^^^^^^^
90-
91-
error: unused attribute
92-
--> $DIR/unused-attr.rs:4:1
93-
|
94-
LL | #![rustc_dummy]
95-
| ^^^^^^^^^^^^^^^
96-
9797
error: aborting due to 15 previous errors
9898

0 commit comments

Comments
 (0)