mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-22 23:04:33 +00:00
Auto merge of #76656 - jonas-schievink:fewer-unstable-metadata-queries, r=lcnr
Don't query stability data when `staged_api` is off This data only needs to be encoded when `#![feature(staged_api)]` or `-Zforce-unstable-if-unmarked` is on. Running these queries takes measurable time on large crates with many items, so skip it when the unstable flags have not been enabled.
This commit is contained in:
commit
1eb00abf35
@ -3703,6 +3703,7 @@ dependencies = [
|
|||||||
"rustc_data_structures",
|
"rustc_data_structures",
|
||||||
"rustc_errors",
|
"rustc_errors",
|
||||||
"rustc_expand",
|
"rustc_expand",
|
||||||
|
"rustc_feature",
|
||||||
"rustc_hir",
|
"rustc_hir",
|
||||||
"rustc_hir_pretty",
|
"rustc_hir_pretty",
|
||||||
"rustc_index",
|
"rustc_index",
|
||||||
|
@ -17,6 +17,7 @@ rustc_middle = { path = "../rustc_middle" }
|
|||||||
rustc_attr = { path = "../rustc_attr" }
|
rustc_attr = { path = "../rustc_attr" }
|
||||||
rustc_data_structures = { path = "../rustc_data_structures" }
|
rustc_data_structures = { path = "../rustc_data_structures" }
|
||||||
rustc_errors = { path = "../rustc_errors" }
|
rustc_errors = { path = "../rustc_errors" }
|
||||||
|
rustc_feature = { path = "../rustc_feature" }
|
||||||
rustc_hir = { path = "../rustc_hir" }
|
rustc_hir = { path = "../rustc_hir" }
|
||||||
rustc_hir_pretty = { path = "../rustc_hir_pretty" }
|
rustc_hir_pretty = { path = "../rustc_hir_pretty" }
|
||||||
rustc_target = { path = "../rustc_target" }
|
rustc_target = { path = "../rustc_target" }
|
||||||
|
@ -40,6 +40,7 @@ use tracing::{debug, trace};
|
|||||||
pub(super) struct EncodeContext<'a, 'tcx> {
|
pub(super) struct EncodeContext<'a, 'tcx> {
|
||||||
opaque: opaque::Encoder,
|
opaque: opaque::Encoder,
|
||||||
tcx: TyCtxt<'tcx>,
|
tcx: TyCtxt<'tcx>,
|
||||||
|
feat: &'tcx rustc_feature::Features,
|
||||||
|
|
||||||
tables: TableBuilders<'tcx>,
|
tables: TableBuilders<'tcx>,
|
||||||
|
|
||||||
@ -1132,15 +1133,25 @@ impl EncodeContext<'a, 'tcx> {
|
|||||||
|
|
||||||
fn encode_stability(&mut self, def_id: DefId) {
|
fn encode_stability(&mut self, def_id: DefId) {
|
||||||
debug!("EncodeContext::encode_stability({:?})", def_id);
|
debug!("EncodeContext::encode_stability({:?})", def_id);
|
||||||
if let Some(stab) = self.tcx.lookup_stability(def_id) {
|
|
||||||
record!(self.tables.stability[def_id] <- stab)
|
// The query lookup can take a measurable amount of time in crates with many items. Check if
|
||||||
|
// the stability attributes are even enabled before using their queries.
|
||||||
|
if self.feat.staged_api || self.tcx.sess.opts.debugging_opts.force_unstable_if_unmarked {
|
||||||
|
if let Some(stab) = self.tcx.lookup_stability(def_id) {
|
||||||
|
record!(self.tables.stability[def_id] <- stab)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn encode_const_stability(&mut self, def_id: DefId) {
|
fn encode_const_stability(&mut self, def_id: DefId) {
|
||||||
debug!("EncodeContext::encode_const_stability({:?})", def_id);
|
debug!("EncodeContext::encode_const_stability({:?})", def_id);
|
||||||
if let Some(stab) = self.tcx.lookup_const_stability(def_id) {
|
|
||||||
record!(self.tables.const_stability[def_id] <- stab)
|
// The query lookup can take a measurable amount of time in crates with many items. Check if
|
||||||
|
// the stability attributes are even enabled before using their queries.
|
||||||
|
if self.feat.staged_api || self.tcx.sess.opts.debugging_opts.force_unstable_if_unmarked {
|
||||||
|
if let Some(stab) = self.tcx.lookup_const_stability(def_id) {
|
||||||
|
record!(self.tables.const_stability[def_id] <- stab)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1979,6 +1990,7 @@ fn encode_metadata_impl(tcx: TyCtxt<'_>) -> EncodedMetadata {
|
|||||||
let mut ecx = EncodeContext {
|
let mut ecx = EncodeContext {
|
||||||
opaque: encoder,
|
opaque: encoder,
|
||||||
tcx,
|
tcx,
|
||||||
|
feat: tcx.features(),
|
||||||
tables: Default::default(),
|
tables: Default::default(),
|
||||||
lazy_state: LazyState::NoNode,
|
lazy_state: LazyState::NoNode,
|
||||||
type_shorthands: Default::default(),
|
type_shorthands: Default::default(),
|
||||||
|
Loading…
Reference in New Issue
Block a user