diff options
| author | bors <bors@rust-lang.org> | 2023-09-14 06:29:23 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2023-09-14 06:29:23 +0000 |
| commit | e17235105cd48cd4e19e8b4fd8e9701e5a7a0f6f (patch) | |
| tree | 4e24e40f015953d5fc73c7397f7c9dd15f05bf7a | |
| parent | 23949593103d03a82c7ebc2e84434ce6c6edc561 (diff) | |
| parent | 01d7bf09f380236f6eb059d33971d7bf0d755531 (diff) | |
| download | rust-e17235105cd48cd4e19e8b4fd8e9701e5a7a0f6f.tar.gz rust-e17235105cd48cd4e19e8b4fd8e9701e5a7a0f6f.zip | |
Auto merge of #115825 - cjgillot:expr-field-lint, r=compiler-errors
Visit ExprField for lint levels. Fixes https://github.com/rust-lang/rust/issues/115823
| -rw-r--r-- | compiler/rustc_lint/src/late.rs | 4 | ||||
| -rw-r--r-- | compiler/rustc_lint/src/levels.rs | 5 | ||||
| -rw-r--r-- | tests/ui/lint/expr-field.rs | 15 |
3 files changed, 24 insertions, 0 deletions
diff --git a/compiler/rustc_lint/src/late.rs b/compiler/rustc_lint/src/late.rs index b24186ae1aa..6c8b60c8d74 100644 --- a/compiler/rustc_lint/src/late.rs +++ b/compiler/rustc_lint/src/late.rs @@ -159,6 +159,10 @@ impl<'tcx, T: LateLintPass<'tcx>> hir_visit::Visitor<'tcx> for LateContextAndPas hir_visit::walk_pat(self, p); } + fn visit_expr_field(&mut self, field: &'tcx hir::ExprField<'tcx>) { + self.with_lint_attrs(field.hir_id, |cx| hir_visit::walk_expr_field(cx, field)) + } + fn visit_expr(&mut self, e: &'tcx hir::Expr<'tcx>) { ensure_sufficient_stack(|| { self.with_lint_attrs(e.hir_id, |cx| { diff --git a/compiler/rustc_lint/src/levels.rs b/compiler/rustc_lint/src/levels.rs index df67cf5d12f..ba521b969ce 100644 --- a/compiler/rustc_lint/src/levels.rs +++ b/compiler/rustc_lint/src/levels.rs @@ -338,6 +338,11 @@ impl<'tcx> Visitor<'tcx> for LintLevelsBuilder<'_, LintLevelQueryMap<'tcx>> { intravisit::walk_expr(self, e); } + fn visit_expr_field(&mut self, f: &'tcx hir::ExprField<'tcx>) { + self.add_id(f.hir_id); + intravisit::walk_expr_field(self, f); + } + fn visit_field_def(&mut self, s: &'tcx hir::FieldDef<'tcx>) { self.add_id(s.hir_id); intravisit::walk_field_def(self, s); diff --git a/tests/ui/lint/expr-field.rs b/tests/ui/lint/expr-field.rs new file mode 100644 index 00000000000..638fbf521c4 --- /dev/null +++ b/tests/ui/lint/expr-field.rs @@ -0,0 +1,15 @@ +// check-pass + +pub struct A { + pub x: u32, +} + +#[deny(unused_comparisons)] +pub fn foo(y: u32) -> A { + A { + #[allow(unused_comparisons)] + x: if y < 0 { 1 } else { 2 }, + } +} + +fn main() {} |
