From 0b4cbee660a5c07e17ba86f3d1a51c4c1f9d5a13 Mon Sep 17 00:00:00 2001 From: Oli Scherer Date: Fri, 23 Feb 2024 23:29:09 +0000 Subject: [PATCH] Add `nested` bool to `DefKind::Static`. Will be used in the next commit --- compiler/rustc_const_eval/src/interpret/validity.rs | 2 +- compiler/rustc_hir/src/def.rs | 2 ++ compiler/rustc_hir_analysis/src/check/errs.rs | 2 +- compiler/rustc_metadata/src/rmeta/table.rs | 6 ++++-- compiler/rustc_middle/src/hir/map/mod.rs | 2 +- compiler/rustc_middle/src/mir/pretty.rs | 6 ++++-- compiler/rustc_middle/src/ty/util.rs | 2 +- compiler/rustc_resolve/src/def_collector.rs | 4 ++-- src/librustdoc/passes/collect_intra_doc_links.rs | 2 +- .../clippy_lints/src/multiple_unsafe_ops_per_block.rs | 4 ++-- 10 files changed, 19 insertions(+), 13 deletions(-) diff --git a/compiler/rustc_const_eval/src/interpret/validity.rs b/compiler/rustc_const_eval/src/interpret/validity.rs index f6978860439..22a17eff6ff 100644 --- a/compiler/rustc_const_eval/src/interpret/validity.rs +++ b/compiler/rustc_const_eval/src/interpret/validity.rs @@ -459,7 +459,7 @@ fn check_safe_pointer( assert!(self.ecx.tcx.is_static(did)); let is_mut = matches!( self.ecx.tcx.def_kind(did), - DefKind::Static { mt: Mutability::Mut } + DefKind::Static { mt: Mutability::Mut, .. } ) || !self .ecx .tcx diff --git a/compiler/rustc_hir/src/def.rs b/compiler/rustc_hir/src/def.rs index 3dc4a6a641f..63dee3a5738 100644 --- a/compiler/rustc_hir/src/def.rs +++ b/compiler/rustc_hir/src/def.rs @@ -78,6 +78,8 @@ pub enum DefKind { Static { /// Whether it's a `static mut` or just a `static`. mt: ast::Mutability, + /// Whether it's an anonymous static generated for nested allocations. + nested: bool, }, /// Refers to the struct or enum variant's constructor. /// diff --git a/compiler/rustc_hir_analysis/src/check/errs.rs b/compiler/rustc_hir_analysis/src/check/errs.rs index 068b263fa86..3f2c8d79ed2 100644 --- a/compiler/rustc_hir_analysis/src/check/errs.rs +++ b/compiler/rustc_hir_analysis/src/check/errs.rs @@ -48,7 +48,7 @@ fn is_path_static_mut(expr: hir::Expr<'_>) -> Option { if let hir::ExprKind::Path(qpath) = expr.kind && let hir::QPath::Resolved(_, path) = qpath && let hir::def::Res::Def(def_kind, _) = path.res - && let hir::def::DefKind::Static { mt } = def_kind + && let hir::def::DefKind::Static { mt, nested: false } = def_kind && matches!(mt, Mutability::Mut) { return Some(qpath_to_string(&qpath)); diff --git a/compiler/rustc_metadata/src/rmeta/table.rs b/compiler/rustc_metadata/src/rmeta/table.rs index dd5a560033f..3c966cf3a9f 100644 --- a/compiler/rustc_metadata/src/rmeta/table.rs +++ b/compiler/rustc_metadata/src/rmeta/table.rs @@ -155,8 +155,10 @@ impl FixedSizeEncoding for Option<$ty> { ( Impl { of_trait: false } ) ( Impl { of_trait: true } ) ( Closure ) - ( Static{mt:ast::Mutability::Not} ) - ( Static{mt:ast::Mutability::Mut} ) + ( Static{mt:ast::Mutability::Not, nested: false}) + ( Static{mt:ast::Mutability::Mut, nested: false}) + ( Static{mt:ast::Mutability::Not, nested: true}) + ( Static{mt:ast::Mutability::Mut, nested: true}) ( Ctor(CtorOf::Struct, CtorKind::Fn) ) ( Ctor(CtorOf::Struct, CtorKind::Const) ) ( Ctor(CtorOf::Variant, CtorKind::Fn) ) diff --git a/compiler/rustc_middle/src/hir/map/mod.rs b/compiler/rustc_middle/src/hir/map/mod.rs index 9e8d7835402..4a683a5f864 100644 --- a/compiler/rustc_middle/src/hir/map/mod.rs +++ b/compiler/rustc_middle/src/hir/map/mod.rs @@ -343,7 +343,7 @@ pub fn body_owner_kind(self, def_id: impl Into) -> BodyOwnerKind { DefKind::InlineConst => BodyOwnerKind::Const { inline: true }, DefKind::Ctor(..) | DefKind::Fn | DefKind::AssocFn => BodyOwnerKind::Fn, DefKind::Closure => BodyOwnerKind::Closure, - DefKind::Static { mt } => BodyOwnerKind::Static(mt), + DefKind::Static { mt, nested: false } => BodyOwnerKind::Static(mt), dk => bug!("{:?} is not a body node: {:?}", def_id, dk), } } diff --git a/compiler/rustc_middle/src/mir/pretty.rs b/compiler/rustc_middle/src/mir/pretty.rs index 9651f8cc661..27d7f396798 100644 --- a/compiler/rustc_middle/src/mir/pretty.rs +++ b/compiler/rustc_middle/src/mir/pretty.rs @@ -498,8 +498,10 @@ fn write_mir_sig(tcx: TyCtxt<'_>, body: &Body<'_>, w: &mut dyn io::Write) -> io: match (kind, body.source.promoted) { (_, Some(_)) => write!(w, "const ")?, // promoteds are the closest to consts (DefKind::Const | DefKind::AssocConst, _) => write!(w, "const ")?, - (DefKind::Static { mt: hir::Mutability::Not }, _) => write!(w, "static ")?, - (DefKind::Static { mt: hir::Mutability::Mut }, _) => write!(w, "static mut ")?, + (DefKind::Static { mt: hir::Mutability::Not, nested: false }, _) => write!(w, "static ")?, + (DefKind::Static { mt: hir::Mutability::Mut, nested: false }, _) => { + write!(w, "static mut ")? + } (_, _) if is_function => write!(w, "fn ")?, (DefKind::AnonConst | DefKind::InlineConst, _) => {} // things like anon const, not an item _ => bug!("Unexpected def kind {:?}", kind), diff --git a/compiler/rustc_middle/src/ty/util.rs b/compiler/rustc_middle/src/ty/util.rs index c2619772f76..b854ac6783d 100644 --- a/compiler/rustc_middle/src/ty/util.rs +++ b/compiler/rustc_middle/src/ty/util.rs @@ -621,7 +621,7 @@ pub fn is_static(self, def_id: DefId) -> bool { #[inline] pub fn static_mutability(self, def_id: DefId) -> Option { - if let DefKind::Static { mt } = self.def_kind(def_id) { Some(mt) } else { None } + if let DefKind::Static { mt, .. } = self.def_kind(def_id) { Some(mt) } else { None } } /// Returns `true` if this is a `static` item with the `#[thread_local]` attribute. diff --git a/compiler/rustc_resolve/src/def_collector.rs b/compiler/rustc_resolve/src/def_collector.rs index 6c207c4756c..929b77bbd22 100644 --- a/compiler/rustc_resolve/src/def_collector.rs +++ b/compiler/rustc_resolve/src/def_collector.rs @@ -127,7 +127,7 @@ fn visit_item(&mut self, i: &'a Item) { ItemKind::Union(..) => DefKind::Union, ItemKind::ExternCrate(..) => DefKind::ExternCrate, ItemKind::TyAlias(..) => DefKind::TyAlias, - ItemKind::Static(s) => DefKind::Static { mt: s.mutability }, + ItemKind::Static(s) => DefKind::Static { mt: s.mutability, nested: false }, ItemKind::Const(..) => DefKind::Const, ItemKind::Fn(..) | ItemKind::Delegation(..) => DefKind::Fn, ItemKind::MacroDef(..) => { @@ -214,7 +214,7 @@ fn visit_use_tree(&mut self, use_tree: &'a UseTree, id: NodeId, _nested: bool) { fn visit_foreign_item(&mut self, fi: &'a ForeignItem) { let def_kind = match fi.kind { - ForeignItemKind::Static(_, mt, _) => DefKind::Static { mt }, + ForeignItemKind::Static(_, mt, _) => DefKind::Static { mt, nested: false }, ForeignItemKind::Fn(_) => DefKind::Fn, ForeignItemKind::TyAlias(_) => DefKind::ForeignTy, ForeignItemKind::MacCall(_) => return self.visit_macro_invoc(fi.id), diff --git a/src/librustdoc/passes/collect_intra_doc_links.rs b/src/librustdoc/passes/collect_intra_doc_links.rs index 8f32f5fceb1..7487c98657b 100644 --- a/src/librustdoc/passes/collect_intra_doc_links.rs +++ b/src/librustdoc/passes/collect_intra_doc_links.rs @@ -1514,7 +1514,7 @@ fn from_str(link: &str) -> Result, (String, Range Kind(DefKind::Union), "module" | "mod" => Kind(DefKind::Mod), "const" | "constant" => Kind(DefKind::Const), - "static" => Kind(DefKind::Static { mt: Mutability::Not }), + "static" => Kind(DefKind::Static { mt: Mutability::Not, nested: false }), "function" | "fn" | "method" => Kind(DefKind::Fn), "derive" => Kind(DefKind::Macro(MacroKind::Derive)), "type" => NS(Namespace::TypeNS), diff --git a/src/tools/clippy/clippy_lints/src/multiple_unsafe_ops_per_block.rs b/src/tools/clippy/clippy_lints/src/multiple_unsafe_ops_per_block.rs index d8caa632b93..4155e608026 100644 --- a/src/tools/clippy/clippy_lints/src/multiple_unsafe_ops_per_block.rs +++ b/src/tools/clippy/clippy_lints/src/multiple_unsafe_ops_per_block.rs @@ -109,7 +109,7 @@ fn collect_unsafe_exprs<'tcx>( ExprKind::Path(QPath::Resolved( _, hir::Path { - res: Res::Def(DefKind::Static{mt:Mutability::Mut}, _), + res: Res::Def(DefKind::Static{mt:Mutability::Mut, ..}, _), .. }, )) => { @@ -149,7 +149,7 @@ fn collect_unsafe_exprs<'tcx>( ExprKind::Path(QPath::Resolved( _, hir::Path { - res: Res::Def(DefKind::Static{mt:Mutability::Mut}, _), + res: Res::Def(DefKind::Static{mt:Mutability::Mut, ..}, _), .. } ))