Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 13 additions & 0 deletions Cargo.lock
Original file line number Diff line number Diff line change
Expand Up @@ -3482,6 +3482,7 @@ dependencies = [
"rustc_infer",
"rustc_lexer",
"rustc_macros",
"rustc_metadata",
"rustc_middle",
"rustc_mir_dataflow",
"rustc_session",
Expand Down Expand Up @@ -3618,6 +3619,7 @@ dependencies = [
"rustc_index",
"rustc_infer",
"rustc_macros",
"rustc_metadata",
"rustc_middle",
"rustc_mir_dataflow",
"rustc_session",
Expand Down Expand Up @@ -3886,6 +3888,7 @@ dependencies = [
"rustc_infer",
"rustc_lint_defs",
"rustc_macros",
"rustc_metadata",
"rustc_middle",
"rustc_session",
"rustc_span",
Expand Down Expand Up @@ -3935,6 +3938,7 @@ dependencies = [
"rustc_infer",
"rustc_lint",
"rustc_macros",
"rustc_metadata",
"rustc_middle",
"rustc_session",
"rustc_span",
Expand Down Expand Up @@ -4079,6 +4083,7 @@ dependencies = [
"rustc_index",
"rustc_infer",
"rustc_macros",
"rustc_metadata",
"rustc_middle",
"rustc_parse_format",
"rustc_session",
Expand Down Expand Up @@ -4217,6 +4222,7 @@ dependencies = [
"rustc_infer",
"rustc_lint",
"rustc_macros",
"rustc_metadata",
"rustc_middle",
"rustc_pattern_analysis",
"rustc_session",
Expand All @@ -4239,6 +4245,7 @@ dependencies = [
"rustc_graphviz",
"rustc_index",
"rustc_macros",
"rustc_metadata",
"rustc_middle",
"rustc_span",
"smallvec",
Expand All @@ -4263,6 +4270,7 @@ dependencies = [
"rustc_index",
"rustc_infer",
"rustc_macros",
"rustc_metadata",
"rustc_middle",
"rustc_mir_build",
"rustc_mir_dataflow",
Expand All @@ -4284,6 +4292,7 @@ dependencies = [
"rustc_fluent_macro",
"rustc_hir",
"rustc_macros",
"rustc_metadata",
"rustc_middle",
"rustc_session",
"rustc_span",
Expand Down Expand Up @@ -4356,6 +4365,7 @@ dependencies = [
"rustc_hir",
"rustc_index",
"rustc_macros",
"rustc_metadata",
"rustc_middle",
"rustc_privacy",
"rustc_session",
Expand Down Expand Up @@ -4436,6 +4446,7 @@ dependencies = [
"rustc_data_structures",
"rustc_hir",
"rustc_hir_pretty",
"rustc_metadata",
"rustc_middle",
"rustc_session",
"rustc_span",
Expand Down Expand Up @@ -4663,6 +4674,7 @@ dependencies = [
"rustc_hir",
"rustc_infer",
"rustc_macros",
"rustc_metadata",
"rustc_middle",
"rustc_next_trait_solver",
"rustc_parse_format",
Expand Down Expand Up @@ -4714,6 +4726,7 @@ dependencies = [
"rustc_index",
"rustc_infer",
"rustc_macros",
"rustc_metadata",
"rustc_middle",
"rustc_session",
"rustc_span",
Expand Down
1 change: 1 addition & 0 deletions compiler/rustc_borrowck/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ rustc_index = { path = "../rustc_index" }
rustc_infer = { path = "../rustc_infer" }
rustc_lexer = { path = "../rustc_lexer" }
rustc_macros = { path = "../rustc_macros" }
rustc_metadata = { path = "../rustc_metadata" }
rustc_middle = { path = "../rustc_middle" }
rustc_mir_dataflow = { path = "../rustc_mir_dataflow" }
rustc_session = { path = "../rustc_session" }
Expand Down
1 change: 1 addition & 0 deletions compiler/rustc_borrowck/src/type_check/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ use rustc_infer::infer::{
BoundRegionConversionTime, InferCtxt, NllRegionVariableOrigin, RegionVariableOrigin,
};
use rustc_infer::traits::PredicateObligations;
use rustc_metadata::TyCtxtMetadataExt;
use rustc_middle::mir::visit::{NonMutatingUseContext, PlaceContext, Visitor};
use rustc_middle::mir::*;
use rustc_middle::traits::query::NoSolution;
Expand Down
1 change: 1 addition & 0 deletions compiler/rustc_codegen_cranelift/src/intrinsics/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ mod llvm_x86;
mod simd;

use cranelift_codegen::ir::AtomicRmwOp;
use rustc_metadata::TyCtxtMetadataExt;
use rustc_middle::ty;
use rustc_middle::ty::GenericArgsRef;
use rustc_middle::ty::layout::ValidityRequirement;
Expand Down
1 change: 1 addition & 0 deletions compiler/rustc_codegen_ssa/src/mir/block.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ use rustc_ast::{InlineAsmOptions, InlineAsmTemplatePiece};
use rustc_data_structures::packed::Pu128;
use rustc_hir::lang_items::LangItem;
use rustc_lint_defs::builtin::TAIL_CALL_TRACK_CALLER;
use rustc_metadata::TyCtxtMetadataExt;
use rustc_middle::mir::{self, AssertKind, InlineAsmMacro, SwitchTargets, UnwindTerminateReason};
use rustc_middle::ty::layout::{HasTyCtxt, LayoutOf, ValidityRequirement};
use rustc_middle::ty::print::{with_no_trimmed_paths, with_no_visible_paths};
Expand Down
1 change: 1 addition & 0 deletions compiler/rustc_const_eval/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ rustc_hir = { path = "../rustc_hir" }
rustc_index = { path = "../rustc_index" }
rustc_infer = { path = "../rustc_infer" }
rustc_macros = { path = "../rustc_macros" }
rustc_metadata = { path = "../rustc_metadata" }
rustc_middle = { path = "../rustc_middle" }
rustc_mir_dataflow = { path = "../rustc_mir_dataflow" }
rustc_session = { path = "../rustc_session" }
Expand Down
1 change: 1 addition & 0 deletions compiler/rustc_const_eval/src/check_consts/check.rs
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ use rustc_hir::def_id::DefId;
use rustc_hir::{self as hir, LangItem};
use rustc_index::bit_set::DenseBitSet;
use rustc_infer::infer::TyCtxtInferExt;
use rustc_metadata::TyCtxtMetadataExt;
use rustc_middle::mir::visit::Visitor;
use rustc_middle::mir::*;
use rustc_middle::span_bug;
Expand Down
1 change: 1 addition & 0 deletions compiler/rustc_const_eval/src/const_eval/machine.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ use rustc_ast::Mutability;
use rustc_data_structures::fx::{FxHashMap, FxIndexMap, IndexEntry};
use rustc_hir::def_id::{DefId, LocalDefId};
use rustc_hir::{self as hir, CRATE_HIR_ID, LangItem};
use rustc_metadata::TyCtxtMetadataExt;
use rustc_middle::mir::AssertMessage;
use rustc_middle::mir::interpret::ReportedErrorInfo;
use rustc_middle::query::TyCtxtAt;
Expand Down
1 change: 1 addition & 0 deletions compiler/rustc_const_eval/src/interpret/call.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ use std::borrow::Cow;
use either::{Left, Right};
use rustc_abi::{self as abi, ExternAbi, FieldIdx, Integer, VariantIdx};
use rustc_hir::def_id::DefId;
use rustc_metadata::TyCtxtMetadataExt;
use rustc_middle::ty::layout::{IntegerExt, TyAndLayout};
use rustc_middle::ty::{self, AdtDef, Instance, Ty, VariantDef};
use rustc_middle::{bug, mir, span_bug};
Expand Down
1 change: 1 addition & 0 deletions compiler/rustc_hir_analysis/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ rustc_index = { path = "../rustc_index" }
rustc_infer = { path = "../rustc_infer" }
rustc_lint_defs = { path = "../rustc_lint_defs" }
rustc_macros = { path = "../rustc_macros" }
rustc_metadata = { path = "../rustc_metadata" }
rustc_middle = { path = "../rustc_middle" }
rustc_session = { path = "../rustc_session" }
rustc_span = { path = "../rustc_span" }
Expand Down
1 change: 1 addition & 0 deletions compiler/rustc_hir_analysis/src/check/check.rs
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ use rustc_infer::traits::{Obligation, ObligationCauseCode, WellFormedLoc};
use rustc_lint_defs::builtin::{
REPR_TRANSPARENT_EXTERNAL_PRIVATE_FIELDS, UNSUPPORTED_CALLING_CONVENTIONS,
};
use rustc_metadata::TyCtxtMetadataExt;
use rustc_middle::hir::nested_filter;
use rustc_middle::middle::resolve_bound_vars::ResolvedArg;
use rustc_middle::middle::stability::EvalResult;
Expand Down
1 change: 1 addition & 0 deletions compiler/rustc_hir_typeck/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ rustc_index = { path = "../rustc_index" }
rustc_infer = { path = "../rustc_infer" }
rustc_lint = { path = "../rustc_lint" }
rustc_macros = { path = "../rustc_macros" }
rustc_metadata = { path = "../rustc_metadata" }
rustc_middle = { path = "../rustc_middle" }
rustc_session = { path = "../rustc_session" }
rustc_span = { path = "../rustc_span" }
Expand Down
1 change: 1 addition & 0 deletions compiler/rustc_hir_typeck/src/coercion.rs
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@ use rustc_infer::infer::{DefineOpaqueTypes, InferOk, InferResult, RegionVariable
use rustc_infer::traits::{
MatchExpressionArmCause, Obligation, PredicateObligation, PredicateObligations, SelectionError,
};
use rustc_metadata::TyCtxtMetadataExt;
use rustc_middle::span_bug;
use rustc_middle::ty::adjustment::{
Adjust, Adjustment, AllowTwoPhase, AutoBorrow, AutoBorrowMutability, PointerCoercion,
Expand Down
1 change: 1 addition & 0 deletions compiler/rustc_hir_typeck/src/expr.rs
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ use rustc_hir_analysis::NoVariantNamed;
use rustc_hir_analysis::hir_ty_lowering::{FeedConstTy, HirTyLowerer as _};
use rustc_infer::infer::{self, DefineOpaqueTypes, InferOk, RegionVariableOrigin};
use rustc_infer::traits::query::NoSolution;
use rustc_metadata::TyCtxtMetadataExt;
use rustc_middle::ty::adjustment::{Adjust, Adjustment, AllowTwoPhase};
use rustc_middle::ty::error::{ExpectedFound, TypeError};
use rustc_middle::ty::{self, AdtKind, GenericArgsRef, Ty, TypeVisitableExt};
Expand Down
1 change: 1 addition & 0 deletions compiler/rustc_lint/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ rustc_hir = { path = "../rustc_hir" }
rustc_index = { path = "../rustc_index" }
rustc_infer = { path = "../rustc_infer" }
rustc_macros = { path = "../rustc_macros" }
rustc_metadata = { path = "../rustc_metadata" }
rustc_middle = { path = "../rustc_middle" }
rustc_parse_format = { path = "../rustc_parse_format" }
rustc_session = { path = "../rustc_session" }
Expand Down
1 change: 1 addition & 0 deletions compiler/rustc_lint/src/builtin.rs
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ use rustc_hir::def::{DefKind, Res};
use rustc_hir::def_id::{CRATE_DEF_ID, DefId, LocalDefId};
use rustc_hir::intravisit::FnKind as HirFnKind;
use rustc_hir::{Body, FnDecl, ImplItemImplKind, PatKind, PredicateOrigin, find_attr};
use rustc_metadata::TyCtxtMetadataExt;
use rustc_middle::bug;
use rustc_middle::lint::LevelAndSource;
use rustc_middle::ty::layout::LayoutOf;
Expand Down
1 change: 1 addition & 0 deletions compiler/rustc_lint/src/transmute.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ use rustc_hir::def::{DefKind, Res};
use rustc_hir::def_id::LocalDefId;
use rustc_hir::{self as hir};
use rustc_macros::LintDiagnostic;
use rustc_metadata::TyCtxtMetadataExt;
use rustc_middle::ty::{self, Ty};
use rustc_session::{declare_lint, impl_lint_pass};
use rustc_span::sym;
Expand Down
2 changes: 2 additions & 0 deletions compiler/rustc_metadata/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ pub use rmeta::provide;
mod dependency_format;
mod foreign_modules;
mod native_libs;
mod optimized_queries;
mod rmeta;

pub mod creader;
Expand All @@ -33,6 +34,7 @@ pub use native_libs::{
NativeLibSearchFallback, find_native_static_library, try_find_native_dynamic_library,
try_find_native_static_library, walk_native_lib_search_dirs,
};
pub use optimized_queries::TyCtxtMetadataExt;
pub use rmeta::{EncodedMetadata, METADATA_HEADER, encode_metadata, rendered_const};

rustc_fluent_macro::fluent_messages! { "../messages.ftl" }
52 changes: 52 additions & 0 deletions compiler/rustc_metadata/src/optimized_queries.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
use rustc_hir::def::DefKind;
use rustc_hir::def_id::DefId;
use rustc_macros::extension;
use rustc_middle::query::IntoQueryParam;
use rustc_middle::ty;
use rustc_middle::ty::TyCtxt;
use rustc_span::Symbol;

use crate::creader::CStore;

#[extension(pub trait TyCtxtMetadataExt<'tcx>)]
impl<'tcx> TyCtxt<'tcx> {
#[inline]
fn intrinsic_extern(self, def_id: DefId) -> Option<ty::IntrinsicDef> {
if self.dep_graph.is_fully_enabled() {
self.intrinsic_raw_q(def_id)
} else {
assert!(!def_id.is_local());
let cdata =
rustc_data_structures::sync::FreezeReadGuard::map(CStore::from_tcx(self), |c| {
c.get_crate_data(def_id.krate).cdata
});
let cdata =
crate::creader::CrateMetadataRef { cdata: &cdata, cstore: &CStore::from_tcx(self) };
cdata.get_intrinsic(def_id.index)
}
}

#[inline]
fn is_intrinsic(self, def_id: DefId, name: Symbol) -> bool {
let Some(i) = self.intrinsic(def_id) else { return false };
i.name == name
}

#[inline]
fn intrinsic_raw(self, def_id: DefId) -> Option<ty::IntrinsicDef> {
if let Some(local_def_id) = def_id.as_local() {
self.intrinsic_local(local_def_id)
} else {
self.intrinsic_extern(def_id)
}
}

#[inline]
fn intrinsic(self, def_id: impl IntoQueryParam<DefId> + Copy) -> Option<ty::IntrinsicDef> {
match self.def_kind(def_id) {
DefKind::Fn | DefKind::AssocFn => {}
_ => return None,
}
self.intrinsic_raw(def_id.into_query_param())
}
}
2 changes: 1 addition & 1 deletion compiler/rustc_metadata/src/rmeta/decoder.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1836,7 +1836,7 @@ impl<'a> CrateMetadataRef<'a> {
self.root.tables.attr_flags.get(self, index)
}

fn get_intrinsic(self, index: DefIndex) -> Option<ty::IntrinsicDef> {
pub(crate) fn get_intrinsic(self, index: DefIndex) -> Option<ty::IntrinsicDef> {
self.root.tables.intrinsic.get(self, index).map(|d| d.decode(self))
}

Expand Down
2 changes: 1 addition & 1 deletion compiler/rustc_metadata/src/rmeta/decoder/cstore_impl.rs
Original file line number Diff line number Diff line change
Expand Up @@ -376,7 +376,7 @@ provide! { tcx, def_id, other, cdata,
cdata.get_stability_implications(tcx).iter().copied().collect()
}
stripped_cfg_items => { cdata.get_stripped_cfg_items(cdata.cnum, tcx) }
intrinsic_raw => { cdata.get_intrinsic(def_id.index) }
intrinsic_raw_q => { cdata.get_intrinsic(def_id.index) }
defined_lang_items => { cdata.get_lang_items(tcx) }
diagnostic_items => { cdata.get_diagnostic_items() }
missing_lang_items => { cdata.get_missing_lang_items(tcx) }
Expand Down
1 change: 1 addition & 0 deletions compiler/rustc_metadata/src/rmeta/encoder.rs
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ use rustc_span::{
use tracing::{debug, instrument, trace};

use crate::errors::{FailCreateFileEncoder, FailWriteFile};
use crate::optimized_queries::TyCtxtMetadataExt;
use crate::rmeta::*;

pub(super) struct EncodeContext<'a, 'tcx> {
Expand Down
4 changes: 2 additions & 2 deletions compiler/rustc_middle/src/query/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -209,7 +209,7 @@ rustc_queries! {
/// Contrary to `def_span` below, this query returns the full absolute span of the definition.
/// This span is meant for dep-tracking rather than diagnostics. It should not be used outside
/// of rustc_middle::hir::source_map.
query source_span(key: LocalDefId) -> Span {
query source_span_q(key: LocalDefId) -> Span {
// Accesses untracked data
eval_always
desc { "getting the source span" }
Expand Down Expand Up @@ -2217,7 +2217,7 @@ rustc_queries! {
separate_provide_extern
}
/// Whether the function is an intrinsic
query intrinsic_raw(def_id: DefId) -> Option<rustc_middle::ty::IntrinsicDef> {
query intrinsic_raw_q(def_id: DefId) -> Option<rustc_middle::ty::IntrinsicDef> {
desc { |tcx| "fetch intrinsic name if `{}` is an intrinsic", tcx.def_path_str(def_id) }
separate_provide_extern
}
Expand Down
20 changes: 11 additions & 9 deletions compiler/rustc_middle/src/ty/context.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3431,14 +3431,6 @@ impl<'tcx> TyCtxt<'tcx> {
self.sess.opts.unstable_opts.build_sdylib_interface
}

pub fn intrinsic(self, def_id: impl IntoQueryParam<DefId> + Copy) -> Option<ty::IntrinsicDef> {
match self.def_kind(def_id) {
DefKind::Fn | DefKind::AssocFn => {}
_ => return None,
}
self.intrinsic_raw(def_id)
}

pub fn next_trait_solver_globally(self) -> bool {
self.sess.opts.unstable_opts.next_solver.globally
}
Expand Down Expand Up @@ -3525,6 +3517,15 @@ impl<'tcx> TyCtxt<'tcx> {
}
false
}

#[inline]
pub fn source_span(self, key: LocalDefId) -> Span {
if self.dep_graph.is_fully_enabled() {
self.source_span_q(key)
} else {
self.untracked.source_span.get(key).unwrap_or(DUMMY_SP)
}
}
}

/// Parameter attributes that can only be determined by examining the body of a function instead
Expand All @@ -3551,7 +3552,8 @@ pub fn provide(providers: &mut Providers) {
// We want to check if the panic handler was defined in this crate
tcx.lang_items().panic_impl().is_some_and(|did| did.is_local())
};
providers.source_span = |tcx, def_id| tcx.untracked.source_span.get(def_id).unwrap_or(DUMMY_SP);
providers.source_span_q =
|tcx, def_id| tcx.untracked.source_span.get(def_id).unwrap_or(DUMMY_SP);
}

pub fn contains_name(attrs: &[Attribute], name: Symbol) -> bool {
Expand Down
Loading
Loading