1#![allow(unused_parens)]
64
65use std::ffi::OsStr;
66use std::mem;
67use std::path::PathBuf;
68use std::sync::Arc;
69
70use rustc_arena::TypedArena;
71use rustc_ast::expand::StrippedCfgItem;
72use rustc_ast::expand::allocator::AllocatorKind;
73use rustc_data_structures::fingerprint::Fingerprint;
74use rustc_data_structures::fx::{FxIndexMap, FxIndexSet};
75use rustc_data_structures::sorted_map::SortedMap;
76use rustc_data_structures::steal::Steal;
77use rustc_data_structures::svh::Svh;
78use rustc_data_structures::unord::{UnordMap, UnordSet};
79use rustc_errors::ErrorGuaranteed;
80use rustc_hir::def::{DefKind, DocLinkResMap};
81use rustc_hir::def_id::{
82 CrateNum, DefId, DefIdMap, LocalDefId, LocalDefIdMap, LocalDefIdSet, LocalModDefId,
83};
84use rustc_hir::lang_items::{LangItem, LanguageItems};
85use rustc_hir::{Crate, ItemLocalId, ItemLocalMap, PreciseCapturingArgKind, TraitCandidate};
86use rustc_index::IndexVec;
87use rustc_lint_defs::LintId;
88use rustc_macros::rustc_queries;
89use rustc_query_system::ich::StableHashingContext;
90use rustc_query_system::query::{
91 QueryCache, QueryMode, QueryStackDeferred, QueryState, try_get_cached,
92};
93use rustc_session::Limits;
94use rustc_session::config::{EntryFnType, OptLevel, OutputFilenames, SymbolManglingVersion};
95use rustc_session::cstore::{
96 CrateDepKind, CrateSource, ExternCrate, ForeignModule, LinkagePreference, NativeLib,
97};
98use rustc_session::lint::LintExpectationId;
99use rustc_span::def_id::LOCAL_CRATE;
100use rustc_span::source_map::Spanned;
101use rustc_span::{DUMMY_SP, Span, Symbol};
102use rustc_target::spec::PanicStrategy;
103use {rustc_abi as abi, rustc_ast as ast, rustc_attr_data_structures as attr, rustc_hir as hir};
104
105use crate::infer::canonical::{self, Canonical};
106use crate::lint::LintExpectation;
107use crate::metadata::ModChild;
108use crate::middle::codegen_fn_attrs::CodegenFnAttrs;
109use crate::middle::debugger_visualizer::DebuggerVisualizerFile;
110use crate::middle::exported_symbols::{ExportedSymbol, SymbolExportInfo};
111use crate::middle::lib_features::LibFeatures;
112use crate::middle::privacy::EffectiveVisibilities;
113use crate::middle::resolve_bound_vars::{ObjectLifetimeDefault, ResolveBoundVars, ResolvedArg};
114use crate::middle::stability::{self, DeprecationEntry};
115use crate::mir::interpret::{
116 EvalStaticInitializerRawResult, EvalToAllocationRawResult, EvalToConstValueResult,
117 EvalToValTreeResult, GlobalId, LitToConstInput,
118};
119use crate::mir::mono::{CodegenUnit, CollectionMode, MonoItem, MonoItemPartitions};
120use crate::query::erase::{Erase, erase, restore};
121use crate::query::plumbing::{
122 CyclePlaceholder, DynamicQuery, query_ensure, query_ensure_error_guaranteed, query_get_at,
123};
124use crate::traits::query::{
125 CanonicalAliasGoal, CanonicalDropckOutlivesGoal, CanonicalImpliedOutlivesBoundsGoal,
126 CanonicalPredicateGoal, CanonicalTyGoal, CanonicalTypeOpAscribeUserTypeGoal,
127 CanonicalTypeOpNormalizeGoal, CanonicalTypeOpProvePredicateGoal, DropckConstraint,
128 DropckOutlivesResult, MethodAutoderefStepsResult, NoSolution, NormalizationResult,
129 OutlivesBound,
130};
131use crate::traits::{
132 CodegenObligationError, DynCompatibilityViolation, EvaluationResult, ImplSource,
133 ObligationCause, OverflowError, WellFormedLoc, specialization_graph,
134};
135use crate::ty::fast_reject::SimplifiedType;
136use crate::ty::layout::ValidityRequirement;
137use crate::ty::print::{PrintTraitRefExt, describe_as_module};
138use crate::ty::util::AlwaysRequiresDrop;
139use crate::ty::{
140 self, CrateInherentImpls, GenericArg, GenericArgsRef, PseudoCanonicalInput, SizedTraitKind, Ty,
141 TyCtxt, TyCtxtFeed,
142};
143use crate::{dep_graph, mir, thir};
144
145mod arena_cached;
146pub mod erase;
147mod keys;
148pub use keys::{AsLocalKey, Key, LocalCrate};
149pub mod on_disk_cache;
150#[macro_use]
151pub mod plumbing;
152pub use plumbing::{IntoQueryParam, TyCtxtAt, TyCtxtEnsureDone, TyCtxtEnsureOk};
153
154rustc_queries! {
166 query trigger_delayed_bug(key: DefId) {
168 desc { "triggering a delayed bug for testing incremental" }
169 }
170
171 query registered_tools(_: ()) -> &'tcx ty::RegisteredTools {
173 arena_cache
174 desc { "compute registered tools for crate" }
175 }
176
177 query early_lint_checks(_: ()) {
178 desc { "perform lints prior to AST lowering" }
179 }
180
181 query env_var_os(key: &'tcx OsStr) -> Option<&'tcx OsStr> {
191 eval_always
193 desc { "get the value of an environment variable" }
194 }
195
196 query resolutions(_: ()) -> &'tcx ty::ResolverGlobalCtxt {
197 no_hash
198 desc { "getting the resolver outputs" }
199 }
200
201 query resolver_for_lowering_raw(_: ()) -> (&'tcx Steal<(ty::ResolverAstLowering, Arc<ast::Crate>)>, &'tcx ty::ResolverGlobalCtxt) {
202 eval_always
203 no_hash
204 desc { "getting the resolver for lowering" }
205 }
206
207 query source_span(key: LocalDefId) -> Span {
213 eval_always
215 desc { "getting the source span" }
216 }
217
218 query hir_crate(key: ()) -> &'tcx Crate<'tcx> {
226 arena_cache
227 eval_always
228 desc { "getting the crate HIR" }
229 }
230
231 query hir_crate_items(_: ()) -> &'tcx rustc_middle::hir::ModuleItems {
233 arena_cache
234 eval_always
235 desc { "getting HIR crate items" }
236 }
237
238 query hir_module_items(key: LocalModDefId) -> &'tcx rustc_middle::hir::ModuleItems {
243 arena_cache
244 desc { |tcx| "getting HIR module items in `{}`", tcx.def_path_str(key) }
245 cache_on_disk_if { true }
246 }
247
248 query local_def_id_to_hir_id(key: LocalDefId) -> hir::HirId {
250 desc { |tcx| "getting HIR ID of `{}`", tcx.def_path_str(key) }
251 feedable
252 }
253
254 query hir_owner_parent(key: hir::OwnerId) -> hir::HirId {
259 desc { |tcx| "getting HIR parent of `{}`", tcx.def_path_str(key) }
260 }
261
262 query opt_hir_owner_nodes(key: LocalDefId) -> Option<&'tcx hir::OwnerNodes<'tcx>> {
267 desc { |tcx| "getting HIR owner items in `{}`", tcx.def_path_str(key) }
268 feedable
269 }
270
271 query hir_attr_map(key: hir::OwnerId) -> &'tcx hir::AttributeMap<'tcx> {
276 desc { |tcx| "getting HIR owner attributes in `{}`", tcx.def_path_str(key) }
277 feedable
278 }
279
280 query opt_ast_lowering_delayed_lints(key: hir::OwnerId) -> Option<&'tcx hir::lints::DelayedLints> {
285 desc { |tcx| "getting AST lowering delayed lints in `{}`", tcx.def_path_str(key) }
286 }
287
288 query const_param_default(param: DefId) -> ty::EarlyBinder<'tcx, ty::Const<'tcx>> {
292 desc { |tcx| "computing the default for const parameter `{}`", tcx.def_path_str(param) }
293 cache_on_disk_if { param.is_local() }
294 separate_provide_extern
295 }
296
297 query type_of(key: DefId) -> ty::EarlyBinder<'tcx, Ty<'tcx>> {
316 desc { |tcx|
317 "{action} `{path}`",
318 action = match tcx.def_kind(key) {
319 DefKind::TyAlias => "expanding type alias",
320 DefKind::TraitAlias => "expanding trait alias",
321 _ => "computing type of",
322 },
323 path = tcx.def_path_str(key),
324 }
325 cache_on_disk_if { key.is_local() }
326 separate_provide_extern
327 feedable
328 }
329
330 query type_of_opaque(key: DefId) -> Result<ty::EarlyBinder<'tcx, Ty<'tcx>>, CyclePlaceholder> {
341 desc { |tcx|
342 "computing type of opaque `{path}`",
343 path = tcx.def_path_str(key),
344 }
345 cycle_stash
346 }
347 query type_of_opaque_hir_typeck(key: LocalDefId) -> ty::EarlyBinder<'tcx, Ty<'tcx>> {
348 desc { |tcx|
349 "computing type of opaque `{path}` via HIR typeck",
350 path = tcx.def_path_str(key),
351 }
352 }
353
354 query type_alias_is_lazy(key: DefId) -> bool {
368 desc { |tcx|
369 "computing whether the type alias `{path}` is lazy",
370 path = tcx.def_path_str(key),
371 }
372 separate_provide_extern
373 }
374
375 query collect_return_position_impl_trait_in_trait_tys(key: DefId)
376 -> Result<&'tcx DefIdMap<ty::EarlyBinder<'tcx, Ty<'tcx>>>, ErrorGuaranteed>
377 {
378 desc { "comparing an impl and trait method signature, inferring any hidden `impl Trait` types in the process" }
379 cache_on_disk_if { key.is_local() }
380 separate_provide_extern
381 }
382
383 query opaque_ty_origin(key: DefId) -> hir::OpaqueTyOrigin<DefId>
384 {
385 desc { "determine where the opaque originates from" }
386 separate_provide_extern
387 }
388
389 query unsizing_params_for_adt(key: DefId) -> &'tcx rustc_index::bit_set::DenseBitSet<u32>
390 {
391 arena_cache
392 desc { |tcx|
393 "determining what parameters of `{}` can participate in unsizing",
394 tcx.def_path_str(key),
395 }
396 }
397
398 query analysis(key: ()) {
400 eval_always
401 desc { "running analysis passes on this crate" }
402 }
403
404 query check_expectations(key: Option<Symbol>) {
419 eval_always
420 desc { "checking lint expectations (RFC 2383)" }
421 }
422
423 query generics_of(key: DefId) -> &'tcx ty::Generics {
425 desc { |tcx| "computing generics of `{}`", tcx.def_path_str(key) }
426 arena_cache
427 cache_on_disk_if { key.is_local() }
428 separate_provide_extern
429 feedable
430 }
431
432 query predicates_of(key: DefId) -> ty::GenericPredicates<'tcx> {
440 desc { |tcx| "computing predicates of `{}`", tcx.def_path_str(key) }
441 cache_on_disk_if { key.is_local() }
442 feedable
443 }
444
445 query opaque_types_defined_by(
446 key: LocalDefId
447 ) -> &'tcx ty::List<LocalDefId> {
448 desc {
449 |tcx| "computing the opaque types defined by `{}`",
450 tcx.def_path_str(key.to_def_id())
451 }
452 }
453
454 query nested_bodies_within(
455 key: LocalDefId
456 ) -> &'tcx ty::List<LocalDefId> {
457 desc {
458 |tcx| "computing the coroutines defined within `{}`",
459 tcx.def_path_str(key.to_def_id())
460 }
461 }
462
463 query explicit_item_bounds(key: DefId) -> ty::EarlyBinder<'tcx, &'tcx [(ty::Clause<'tcx>, Span)]> {
482 desc { |tcx| "finding item bounds for `{}`", tcx.def_path_str(key) }
483 cache_on_disk_if { key.is_local() }
484 separate_provide_extern
485 feedable
486 }
487
488 query explicit_item_self_bounds(key: DefId) -> ty::EarlyBinder<'tcx, &'tcx [(ty::Clause<'tcx>, Span)]> {
495 desc { |tcx| "finding item bounds for `{}`", tcx.def_path_str(key) }
496 cache_on_disk_if { key.is_local() }
497 separate_provide_extern
498 feedable
499 }
500
501 query item_bounds(key: DefId) -> ty::EarlyBinder<'tcx, ty::Clauses<'tcx>> {
525 desc { |tcx| "elaborating item bounds for `{}`", tcx.def_path_str(key) }
526 }
527
528 query item_self_bounds(key: DefId) -> ty::EarlyBinder<'tcx, ty::Clauses<'tcx>> {
529 desc { |tcx| "elaborating item assumptions for `{}`", tcx.def_path_str(key) }
530 }
531
532 query item_non_self_bounds(key: DefId) -> ty::EarlyBinder<'tcx, ty::Clauses<'tcx>> {
533 desc { |tcx| "elaborating item assumptions for `{}`", tcx.def_path_str(key) }
534 }
535
536 query impl_super_outlives(key: DefId) -> ty::EarlyBinder<'tcx, ty::Clauses<'tcx>> {
537 desc { |tcx| "elaborating supertrait outlives for trait of `{}`", tcx.def_path_str(key) }
538 }
539
540 query native_libraries(_: CrateNum) -> &'tcx Vec<NativeLib> {
545 arena_cache
546 desc { "looking up the native libraries of a linked crate" }
547 separate_provide_extern
548 }
549
550 query shallow_lint_levels_on(key: hir::OwnerId) -> &'tcx rustc_middle::lint::ShallowLintLevelMap {
551 arena_cache
552 desc { |tcx| "looking up lint levels for `{}`", tcx.def_path_str(key) }
553 }
554
555 query lint_expectations(_: ()) -> &'tcx Vec<(LintExpectationId, LintExpectation)> {
556 arena_cache
557 desc { "computing `#[expect]`ed lints in this crate" }
558 }
559
560 query lints_that_dont_need_to_run(_: ()) -> &'tcx UnordSet<LintId> {
561 arena_cache
562 desc { "Computing all lints that are explicitly enabled or with a default level greater than Allow" }
563 }
564
565 query expn_that_defined(key: DefId) -> rustc_span::ExpnId {
566 desc { |tcx| "getting the expansion that defined `{}`", tcx.def_path_str(key) }
567 separate_provide_extern
568 }
569
570 query is_panic_runtime(_: CrateNum) -> bool {
571 fatal_cycle
572 desc { "checking if the crate is_panic_runtime" }
573 separate_provide_extern
574 }
575
576 query representability(_: LocalDefId) -> rustc_middle::ty::Representability {
578 desc { "checking if `{}` is representable", tcx.def_path_str(key) }
579 cycle_delay_bug
581 anon
585 }
586
587 query representability_adt_ty(_: Ty<'tcx>) -> rustc_middle::ty::Representability {
589 desc { "checking if `{}` is representable", key }
590 cycle_delay_bug
591 anon
592 }
593
594 query params_in_repr(key: DefId) -> &'tcx rustc_index::bit_set::DenseBitSet<u32> {
596 desc { "finding type parameters in the representation" }
597 arena_cache
598 no_hash
599 separate_provide_extern
600 }
601
602 query thir_body(key: LocalDefId) -> Result<(&'tcx Steal<thir::Thir<'tcx>>, thir::ExprId), ErrorGuaranteed> {
605 no_hash
607 desc { |tcx| "building THIR for `{}`", tcx.def_path_str(key) }
608 }
609
610 query mir_keys(_: ()) -> &'tcx rustc_data_structures::fx::FxIndexSet<LocalDefId> {
614 arena_cache
615 desc { "getting a list of all mir_keys" }
616 }
617
618 query mir_const_qualif(key: DefId) -> mir::ConstQualifs {
622 desc { |tcx| "const checking `{}`", tcx.def_path_str(key) }
623 cache_on_disk_if { key.is_local() }
624 separate_provide_extern
625 }
626
627 query mir_built(key: LocalDefId) -> &'tcx Steal<mir::Body<'tcx>> {
633 desc { |tcx| "building MIR for `{}`", tcx.def_path_str(key) }
634 feedable
635 }
636
637 query thir_abstract_const(
639 key: DefId
640 ) -> Result<Option<ty::EarlyBinder<'tcx, ty::Const<'tcx>>>, ErrorGuaranteed> {
641 desc {
642 |tcx| "building an abstract representation for `{}`", tcx.def_path_str(key),
643 }
644 separate_provide_extern
645 }
646
647 query mir_drops_elaborated_and_const_checked(key: LocalDefId) -> &'tcx Steal<mir::Body<'tcx>> {
648 no_hash
649 desc { |tcx| "elaborating drops for `{}`", tcx.def_path_str(key) }
650 }
651
652 query mir_for_ctfe(
653 key: DefId
654 ) -> &'tcx mir::Body<'tcx> {
655 desc { |tcx| "caching mir of `{}` for CTFE", tcx.def_path_str(key) }
656 cache_on_disk_if { key.is_local() }
657 separate_provide_extern
658 }
659
660 query mir_promoted(key: LocalDefId) -> (
661 &'tcx Steal<mir::Body<'tcx>>,
662 &'tcx Steal<IndexVec<mir::Promoted, mir::Body<'tcx>>>
663 ) {
664 no_hash
665 desc { |tcx| "promoting constants in MIR for `{}`", tcx.def_path_str(key) }
666 }
667
668 query closure_typeinfo(key: LocalDefId) -> ty::ClosureTypeInfo<'tcx> {
669 desc {
670 |tcx| "finding symbols for captures of closure `{}`",
671 tcx.def_path_str(key)
672 }
673 }
674
675 query closure_saved_names_of_captured_variables(def_id: DefId) -> &'tcx IndexVec<abi::FieldIdx, Symbol> {
683 arena_cache
684 desc { |tcx| "computing debuginfo for closure `{}`", tcx.def_path_str(def_id) }
685 separate_provide_extern
686 }
687
688 query mir_coroutine_witnesses(key: DefId) -> Option<&'tcx mir::CoroutineLayout<'tcx>> {
689 arena_cache
690 desc { |tcx| "coroutine witness types for `{}`", tcx.def_path_str(key) }
691 cache_on_disk_if { key.is_local() }
692 separate_provide_extern
693 }
694
695 query check_coroutine_obligations(key: LocalDefId) -> Result<(), ErrorGuaranteed> {
696 desc { |tcx| "verify auto trait bounds for coroutine interior type `{}`", tcx.def_path_str(key) }
697 return_result_from_ensure_ok
698 }
699
700 query optimized_mir(key: DefId) -> &'tcx mir::Body<'tcx> {
703 desc { |tcx| "optimizing MIR for `{}`", tcx.def_path_str(key) }
704 cache_on_disk_if { key.is_local() }
705 separate_provide_extern
706 }
707
708 query coverage_attr_on(key: LocalDefId) -> bool {
714 desc { |tcx| "checking for `#[coverage(..)]` on `{}`", tcx.def_path_str(key) }
715 feedable
716 }
717
718 query coverage_ids_info(key: ty::InstanceKind<'tcx>) -> Option<&'tcx mir::coverage::CoverageIdsInfo> {
731 desc { |tcx| "retrieving coverage IDs info from MIR for `{}`", tcx.def_path_str(key.def_id()) }
732 arena_cache
733 }
734
735 query promoted_mir(key: DefId) -> &'tcx IndexVec<mir::Promoted, mir::Body<'tcx>> {
741 desc { |tcx| "optimizing promoted MIR for `{}`", tcx.def_path_str(key) }
742 cache_on_disk_if { key.is_local() }
743 separate_provide_extern
744 }
745
746 query erase_regions_ty(ty: Ty<'tcx>) -> Ty<'tcx> {
750 anon
757 desc { "erasing regions from `{}`", ty }
758 }
759
760 query wasm_import_module_map(_: CrateNum) -> &'tcx DefIdMap<String> {
761 arena_cache
762 desc { "getting wasm import module map" }
763 }
764
765 query trait_explicit_predicates_and_bounds(key: LocalDefId) -> ty::GenericPredicates<'tcx> {
787 desc { |tcx| "computing explicit predicates of trait `{}`", tcx.def_path_str(key) }
788 }
789
790 query explicit_predicates_of(key: DefId) -> ty::GenericPredicates<'tcx> {
796 desc { |tcx| "computing explicit predicates of `{}`", tcx.def_path_str(key) }
797 cache_on_disk_if { key.is_local() }
798 separate_provide_extern
799 feedable
800 }
801
802 query inferred_outlives_of(key: DefId) -> &'tcx [(ty::Clause<'tcx>, Span)] {
809 desc { |tcx| "computing inferred outlives-predicates of `{}`", tcx.def_path_str(key) }
810 cache_on_disk_if { key.is_local() }
811 separate_provide_extern
812 feedable
813 }
814
815 query explicit_super_predicates_of(key: DefId) -> ty::EarlyBinder<'tcx, &'tcx [(ty::Clause<'tcx>, Span)]> {
823 desc { |tcx| "computing the super predicates of `{}`", tcx.def_path_str(key) }
824 cache_on_disk_if { key.is_local() }
825 separate_provide_extern
826 }
827
828 query explicit_implied_predicates_of(key: DefId) -> ty::EarlyBinder<'tcx, &'tcx [(ty::Clause<'tcx>, Span)]> {
835 desc { |tcx| "computing the implied predicates of `{}`", tcx.def_path_str(key) }
836 cache_on_disk_if { key.is_local() }
837 separate_provide_extern
838 }
839
840 query explicit_supertraits_containing_assoc_item(
844 key: (DefId, rustc_span::Ident)
845 ) -> ty::EarlyBinder<'tcx, &'tcx [(ty::Clause<'tcx>, Span)]> {
846 desc { |tcx| "computing the super traits of `{}` with associated type name `{}`",
847 tcx.def_path_str(key.0),
848 key.1
849 }
850 }
851
852 query const_conditions(
862 key: DefId
863 ) -> ty::ConstConditions<'tcx> {
864 desc { |tcx| "computing the conditions for `{}` to be considered const",
865 tcx.def_path_str(key)
866 }
867 separate_provide_extern
868 }
869
870 query explicit_implied_const_bounds(
876 key: DefId
877 ) -> ty::EarlyBinder<'tcx, &'tcx [(ty::PolyTraitRef<'tcx>, Span)]> {
878 desc { |tcx| "computing the implied `[const]` bounds for `{}`",
879 tcx.def_path_str(key)
880 }
881 separate_provide_extern
882 }
883
884 query type_param_predicates(
887 key: (LocalDefId, LocalDefId, rustc_span::Ident)
888 ) -> ty::EarlyBinder<'tcx, &'tcx [(ty::Clause<'tcx>, Span)]> {
889 desc { |tcx| "computing the bounds for type parameter `{}`", tcx.hir_ty_param_name(key.1) }
890 }
891
892 query trait_def(key: DefId) -> &'tcx ty::TraitDef {
893 desc { |tcx| "computing trait definition for `{}`", tcx.def_path_str(key) }
894 arena_cache
895 cache_on_disk_if { key.is_local() }
896 separate_provide_extern
897 }
898 query adt_def(key: DefId) -> ty::AdtDef<'tcx> {
899 desc { |tcx| "computing ADT definition for `{}`", tcx.def_path_str(key) }
900 cache_on_disk_if { key.is_local() }
901 separate_provide_extern
902 }
903 query adt_destructor(key: DefId) -> Option<ty::Destructor> {
904 desc { |tcx| "computing `Drop` impl for `{}`", tcx.def_path_str(key) }
905 cache_on_disk_if { key.is_local() }
906 separate_provide_extern
907 }
908 query adt_async_destructor(key: DefId) -> Option<ty::AsyncDestructor> {
909 desc { |tcx| "computing `AsyncDrop` impl for `{}`", tcx.def_path_str(key) }
910 cache_on_disk_if { key.is_local() }
911 separate_provide_extern
912 }
913 query adt_sizedness_constraint(
914 key: (DefId, SizedTraitKind)
915 ) -> Option<ty::EarlyBinder<'tcx, Ty<'tcx>>> {
916 desc { |tcx| "computing the sizedness constraint for `{}`", tcx.def_path_str(key.0) }
917 }
918
919 query adt_dtorck_constraint(
920 key: DefId
921 ) -> &'tcx DropckConstraint<'tcx> {
922 desc { |tcx| "computing drop-check constraints for `{}`", tcx.def_path_str(key) }
923 }
924
925 query constness(key: DefId) -> hir::Constness {
947 desc { |tcx| "checking if item is const: `{}`", tcx.def_path_str(key) }
948 separate_provide_extern
949 feedable
950 }
951
952 query asyncness(key: DefId) -> ty::Asyncness {
953 desc { |tcx| "checking if the function is async: `{}`", tcx.def_path_str(key) }
954 separate_provide_extern
955 }
956
957 query is_promotable_const_fn(key: DefId) -> bool {
965 desc { |tcx| "checking if item is promotable: `{}`", tcx.def_path_str(key) }
966 }
967
968 query coroutine_by_move_body_def_id(def_id: DefId) -> DefId {
975 desc { |tcx| "looking up the coroutine by-move body for `{}`", tcx.def_path_str(def_id) }
976 separate_provide_extern
977 }
978
979 query coroutine_kind(def_id: DefId) -> Option<hir::CoroutineKind> {
981 desc { |tcx| "looking up coroutine kind of `{}`", tcx.def_path_str(def_id) }
982 separate_provide_extern
983 feedable
984 }
985
986 query coroutine_for_closure(def_id: DefId) -> DefId {
987 desc { |_tcx| "Given a coroutine-closure def id, return the def id of the coroutine returned by it" }
988 separate_provide_extern
989 }
990
991 query coroutine_hidden_types(
992 def_id: DefId
993 ) -> ty::EarlyBinder<'tcx, ty::Binder<'tcx, ty::CoroutineWitnessTypes<TyCtxt<'tcx>>>> {
994 desc { "looking up the hidden types stored across await points in a coroutine" }
995 }
996
997 query crate_variances(_: ()) -> &'tcx ty::CrateVariancesMap<'tcx> {
1005 arena_cache
1006 desc { "computing the variances for items in this crate" }
1007 }
1008
1009 query variances_of(def_id: DefId) -> &'tcx [ty::Variance] {
1017 desc { |tcx| "computing the variances of `{}`", tcx.def_path_str(def_id) }
1018 cache_on_disk_if { def_id.is_local() }
1019 separate_provide_extern
1020 cycle_delay_bug
1021 }
1022
1023 query inferred_outlives_crate(_: ()) -> &'tcx ty::CratePredicatesMap<'tcx> {
1031 arena_cache
1032 desc { "computing the inferred outlives-predicates for items in this crate" }
1033 }
1034
1035 query associated_item_def_ids(key: DefId) -> &'tcx [DefId] {
1038 desc { |tcx| "collecting associated items or fields of `{}`", tcx.def_path_str(key) }
1039 cache_on_disk_if { key.is_local() }
1040 separate_provide_extern
1041 }
1042
1043 query associated_item(key: DefId) -> ty::AssocItem {
1045 desc { |tcx| "computing associated item data for `{}`", tcx.def_path_str(key) }
1046 cache_on_disk_if { key.is_local() }
1047 separate_provide_extern
1048 feedable
1049 }
1050
1051 query associated_items(key: DefId) -> &'tcx ty::AssocItems {
1053 arena_cache
1054 desc { |tcx| "collecting associated items of `{}`", tcx.def_path_str(key) }
1055 }
1056
1057 query impl_item_implementor_ids(impl_id: DefId) -> &'tcx DefIdMap<DefId> {
1079 arena_cache
1080 desc { |tcx| "comparing impl items against trait for `{}`", tcx.def_path_str(impl_id) }
1081 }
1082
1083 query associated_types_for_impl_traits_in_associated_fn(fn_def_id: DefId) -> &'tcx [DefId] {
1090 desc { |tcx| "creating associated items for opaque types returned by `{}`", tcx.def_path_str(fn_def_id) }
1091 cache_on_disk_if { fn_def_id.is_local() }
1092 separate_provide_extern
1093 }
1094
1095 query associated_type_for_impl_trait_in_trait(opaque_ty_def_id: LocalDefId) -> LocalDefId {
1098 desc { |tcx| "creating the associated item corresponding to the opaque type `{}`", tcx.def_path_str(opaque_ty_def_id.to_def_id()) }
1099 cache_on_disk_if { true }
1100 }
1101
1102 query impl_trait_header(impl_id: DefId) -> Option<ty::ImplTraitHeader<'tcx>> {
1105 desc { |tcx| "computing trait implemented by `{}`", tcx.def_path_str(impl_id) }
1106 cache_on_disk_if { impl_id.is_local() }
1107 separate_provide_extern
1108 }
1109
1110 query impl_self_is_guaranteed_unsized(impl_def_id: DefId) -> bool {
1114 desc { |tcx| "computing whether `{}` has a guaranteed unsized self type", tcx.def_path_str(impl_def_id) }
1115 }
1116
1117 query inherent_impls(key: DefId) -> &'tcx [DefId] {
1121 desc { |tcx| "collecting inherent impls for `{}`", tcx.def_path_str(key) }
1122 cache_on_disk_if { key.is_local() }
1123 separate_provide_extern
1124 }
1125
1126 query incoherent_impls(key: SimplifiedType) -> &'tcx [DefId] {
1127 desc { |tcx| "collecting all inherent impls for `{:?}`", key }
1128 }
1129
1130 query check_unsafety(key: LocalDefId) {
1132 desc { |tcx| "unsafety-checking `{}`", tcx.def_path_str(key) }
1133 }
1134
1135 query check_tail_calls(key: LocalDefId) -> Result<(), rustc_errors::ErrorGuaranteed> {
1137 desc { |tcx| "tail-call-checking `{}`", tcx.def_path_str(key) }
1138 return_result_from_ensure_ok
1139 }
1140
1141 query assumed_wf_types(key: LocalDefId) -> &'tcx [(Ty<'tcx>, Span)] {
1146 desc { |tcx| "computing the implied bounds of `{}`", tcx.def_path_str(key) }
1147 }
1148
1149 query assumed_wf_types_for_rpitit(key: DefId) -> &'tcx [(Ty<'tcx>, Span)] {
1152 desc { |tcx| "computing the implied bounds of `{}`", tcx.def_path_str(key) }
1153 separate_provide_extern
1154 }
1155
1156 query fn_sig(key: DefId) -> ty::EarlyBinder<'tcx, ty::PolyFnSig<'tcx>> {
1158 desc { |tcx| "computing function signature of `{}`", tcx.def_path_str(key) }
1159 cache_on_disk_if { key.is_local() }
1160 separate_provide_extern
1161 cycle_delay_bug
1162 }
1163
1164 query lint_mod(key: LocalModDefId) {
1166 desc { |tcx| "linting {}", describe_as_module(key, tcx) }
1167 }
1168
1169 query check_unused_traits(_: ()) {
1170 desc { "checking unused trait imports in crate" }
1171 }
1172
1173 query check_mod_attrs(key: LocalModDefId) {
1175 desc { |tcx| "checking attributes in {}", describe_as_module(key, tcx) }
1176 }
1177
1178 query check_mod_unstable_api_usage(key: LocalModDefId) {
1180 desc { |tcx| "checking for unstable API usage in {}", describe_as_module(key, tcx) }
1181 }
1182
1183 query check_mod_privacy(key: LocalModDefId) {
1184 desc { |tcx| "checking privacy in {}", describe_as_module(key.to_local_def_id(), tcx) }
1185 }
1186
1187 query check_liveness(key: LocalDefId) {
1188 desc { |tcx| "checking liveness of variables in `{}`", tcx.def_path_str(key) }
1189 }
1190
1191 query live_symbols_and_ignored_derived_traits(_: ()) -> &'tcx (
1196 LocalDefIdSet,
1197 LocalDefIdMap<FxIndexSet<(DefId, DefId)>>
1198 ) {
1199 arena_cache
1200 desc { "finding live symbols in crate" }
1201 }
1202
1203 query check_mod_deathness(key: LocalModDefId) {
1204 desc { |tcx| "checking deathness of variables in {}", describe_as_module(key, tcx) }
1205 }
1206
1207 query check_type_wf(key: ()) -> Result<(), ErrorGuaranteed> {
1208 desc { "checking that types are well-formed" }
1209 return_result_from_ensure_ok
1210 }
1211
1212 query coerce_unsized_info(key: DefId) -> Result<ty::adjustment::CoerceUnsizedInfo, ErrorGuaranteed> {
1214 desc { |tcx| "computing CoerceUnsized info for `{}`", tcx.def_path_str(key) }
1215 cache_on_disk_if { key.is_local() }
1216 separate_provide_extern
1217 return_result_from_ensure_ok
1218 }
1219
1220 query typeck(key: LocalDefId) -> &'tcx ty::TypeckResults<'tcx> {
1221 desc { |tcx| "type-checking `{}`", tcx.def_path_str(key) }
1222 cache_on_disk_if(tcx) { !tcx.is_typeck_child(key.to_def_id()) }
1223 }
1224
1225 query used_trait_imports(key: LocalDefId) -> &'tcx UnordSet<LocalDefId> {
1226 desc { |tcx| "finding used_trait_imports `{}`", tcx.def_path_str(key) }
1227 cache_on_disk_if { true }
1228 }
1229
1230 query coherent_trait(def_id: DefId) -> Result<(), ErrorGuaranteed> {
1231 desc { |tcx| "coherence checking all impls of trait `{}`", tcx.def_path_str(def_id) }
1232 return_result_from_ensure_ok
1233 }
1234
1235 query mir_borrowck(key: LocalDefId) -> Result<&'tcx mir::ConcreteOpaqueTypes<'tcx>, ErrorGuaranteed> {
1238 desc { |tcx| "borrow-checking `{}`", tcx.def_path_str(key) }
1239 }
1240
1241 query crate_inherent_impls(k: ()) -> (&'tcx CrateInherentImpls, Result<(), ErrorGuaranteed>) {
1249 desc { "finding all inherent impls defined in crate" }
1250 }
1251
1252 query crate_inherent_impls_validity_check(_: ()) -> Result<(), ErrorGuaranteed> {
1260 desc { "check for inherent impls that should not be defined in crate" }
1261 return_result_from_ensure_ok
1262 }
1263
1264 query crate_inherent_impls_overlap_check(_: ()) -> Result<(), ErrorGuaranteed> {
1272 desc { "check for overlap between inherent impls defined in this crate" }
1273 return_result_from_ensure_ok
1274 }
1275
1276 query orphan_check_impl(key: LocalDefId) -> Result<(), ErrorGuaranteed> {
1279 desc { |tcx|
1280 "checking whether impl `{}` follows the orphan rules",
1281 tcx.def_path_str(key),
1282 }
1283 return_result_from_ensure_ok
1284 }
1285
1286 query mir_callgraph_cyclic(key: LocalDefId) -> &'tcx UnordSet<LocalDefId> {
1288 fatal_cycle
1289 arena_cache
1290 desc { |tcx|
1291 "computing (transitive) callees of `{}` that may recurse",
1292 tcx.def_path_str(key),
1293 }
1294 cache_on_disk_if { true }
1295 }
1296
1297 query mir_inliner_callees(key: ty::InstanceKind<'tcx>) -> &'tcx [(DefId, GenericArgsRef<'tcx>)] {
1299 fatal_cycle
1300 desc { |tcx|
1301 "computing all local function calls in `{}`",
1302 tcx.def_path_str(key.def_id()),
1303 }
1304 }
1305
1306 query tag_for_variant(
1314 key: PseudoCanonicalInput<'tcx, (Ty<'tcx>, abi::VariantIdx)>,
1315 ) -> Option<ty::ScalarInt> {
1316 desc { "computing variant tag for enum" }
1317 }
1318
1319 query eval_to_allocation_raw(key: ty::PseudoCanonicalInput<'tcx, GlobalId<'tcx>>)
1328 -> EvalToAllocationRawResult<'tcx> {
1329 desc { |tcx|
1330 "const-evaluating + checking `{}`",
1331 key.value.display(tcx)
1332 }
1333 cache_on_disk_if { true }
1334 }
1335
1336 query eval_static_initializer(key: DefId) -> EvalStaticInitializerRawResult<'tcx> {
1338 desc { |tcx|
1339 "evaluating initializer of static `{}`",
1340 tcx.def_path_str(key)
1341 }
1342 cache_on_disk_if { key.is_local() }
1343 separate_provide_extern
1344 feedable
1345 }
1346
1347 query eval_to_const_value_raw(key: ty::PseudoCanonicalInput<'tcx, GlobalId<'tcx>>)
1360 -> EvalToConstValueResult<'tcx> {
1361 desc { |tcx|
1362 "simplifying constant for the type system `{}`",
1363 key.value.display(tcx)
1364 }
1365 depth_limit
1366 cache_on_disk_if { true }
1367 }
1368
1369 query eval_to_valtree(
1372 key: ty::PseudoCanonicalInput<'tcx, GlobalId<'tcx>>
1373 ) -> EvalToValTreeResult<'tcx> {
1374 desc { "evaluating type-level constant" }
1375 }
1376
1377 query valtree_to_const_val(key: ty::Value<'tcx>) -> mir::ConstValue<'tcx> {
1379 desc { "converting type-level constant value to MIR constant value"}
1380 }
1381
1382 query destructure_const(key: ty::Const<'tcx>) -> ty::DestructuredConst<'tcx> {
1385 desc { "destructuring type level constant"}
1386 }
1387
1388 query lit_to_const(
1390 key: LitToConstInput<'tcx>
1391 ) -> ty::Const<'tcx> {
1392 desc { "converting literal to const" }
1393 }
1394
1395 query check_match(key: LocalDefId) -> Result<(), rustc_errors::ErrorGuaranteed> {
1396 desc { |tcx| "match-checking `{}`", tcx.def_path_str(key) }
1397 return_result_from_ensure_ok
1398 }
1399
1400 query effective_visibilities(_: ()) -> &'tcx EffectiveVisibilities {
1402 eval_always
1403 desc { "checking effective visibilities" }
1404 }
1405 query check_private_in_public(_: ()) {
1406 eval_always
1407 desc { "checking for private elements in public interfaces" }
1408 }
1409
1410 query reachable_set(_: ()) -> &'tcx LocalDefIdSet {
1411 arena_cache
1412 desc { "reachability" }
1413 cache_on_disk_if { true }
1414 }
1415
1416 query region_scope_tree(def_id: DefId) -> &'tcx crate::middle::region::ScopeTree {
1419 desc { |tcx| "computing drop scopes for `{}`", tcx.def_path_str(def_id) }
1420 }
1421
1422 query mir_shims(key: ty::InstanceKind<'tcx>) -> &'tcx mir::Body<'tcx> {
1424 arena_cache
1425 desc {
1426 |tcx| "generating MIR shim for `{}`, instance={:?}",
1427 tcx.def_path_str(key.def_id()),
1428 key
1429 }
1430 }
1431
1432 query symbol_name(key: ty::Instance<'tcx>) -> ty::SymbolName<'tcx> {
1436 desc { "computing the symbol for `{}`", key }
1437 cache_on_disk_if { true }
1438 }
1439
1440 query def_kind(def_id: DefId) -> DefKind {
1441 desc { |tcx| "looking up definition kind of `{}`", tcx.def_path_str(def_id) }
1442 cache_on_disk_if { def_id.is_local() }
1443 separate_provide_extern
1444 feedable
1445 }
1446
1447 query def_span(def_id: DefId) -> Span {
1449 desc { |tcx| "looking up span for `{}`", tcx.def_path_str(def_id) }
1450 cache_on_disk_if { def_id.is_local() }
1451 separate_provide_extern
1452 feedable
1453 }
1454
1455 query def_ident_span(def_id: DefId) -> Option<Span> {
1457 desc { |tcx| "looking up span for `{}`'s identifier", tcx.def_path_str(def_id) }
1458 cache_on_disk_if { def_id.is_local() }
1459 separate_provide_extern
1460 feedable
1461 }
1462
1463 query lookup_stability(def_id: DefId) -> Option<attr::Stability> {
1464 desc { |tcx| "looking up stability of `{}`", tcx.def_path_str(def_id) }
1465 cache_on_disk_if { def_id.is_local() }
1466 separate_provide_extern
1467 }
1468
1469 query lookup_const_stability(def_id: DefId) -> Option<attr::ConstStability> {
1470 desc { |tcx| "looking up const stability of `{}`", tcx.def_path_str(def_id) }
1471 cache_on_disk_if { def_id.is_local() }
1472 separate_provide_extern
1473 }
1474
1475 query lookup_default_body_stability(def_id: DefId) -> Option<attr::DefaultBodyStability> {
1476 desc { |tcx| "looking up default body stability of `{}`", tcx.def_path_str(def_id) }
1477 separate_provide_extern
1478 }
1479
1480 query should_inherit_track_caller(def_id: DefId) -> bool {
1481 desc { |tcx| "computing should_inherit_track_caller of `{}`", tcx.def_path_str(def_id) }
1482 }
1483
1484 query lookup_deprecation_entry(def_id: DefId) -> Option<DeprecationEntry> {
1485 desc { |tcx| "checking whether `{}` is deprecated", tcx.def_path_str(def_id) }
1486 cache_on_disk_if { def_id.is_local() }
1487 separate_provide_extern
1488 }
1489
1490 query is_doc_hidden(def_id: DefId) -> bool {
1492 desc { |tcx| "checking whether `{}` is `doc(hidden)`", tcx.def_path_str(def_id) }
1493 separate_provide_extern
1494 }
1495
1496 query is_doc_notable_trait(def_id: DefId) -> bool {
1498 desc { |tcx| "checking whether `{}` is `doc(notable_trait)`", tcx.def_path_str(def_id) }
1499 }
1500
1501 query attrs_for_def(def_id: DefId) -> &'tcx [hir::Attribute] {
1505 desc { |tcx| "collecting attributes of `{}`", tcx.def_path_str(def_id) }
1506 separate_provide_extern
1507 }
1508
1509 query codegen_fn_attrs(def_id: DefId) -> &'tcx CodegenFnAttrs {
1510 desc { |tcx| "computing codegen attributes of `{}`", tcx.def_path_str(def_id) }
1511 arena_cache
1512 cache_on_disk_if { def_id.is_local() }
1513 separate_provide_extern
1514 feedable
1515 }
1516
1517 query asm_target_features(def_id: DefId) -> &'tcx FxIndexSet<Symbol> {
1518 desc { |tcx| "computing target features for inline asm of `{}`", tcx.def_path_str(def_id) }
1519 }
1520
1521 query fn_arg_idents(def_id: DefId) -> &'tcx [Option<rustc_span::Ident>] {
1522 desc { |tcx| "looking up function parameter identifiers for `{}`", tcx.def_path_str(def_id) }
1523 separate_provide_extern
1524 }
1525
1526 query rendered_const(def_id: DefId) -> &'tcx String {
1529 arena_cache
1530 desc { |tcx| "rendering constant initializer of `{}`", tcx.def_path_str(def_id) }
1531 separate_provide_extern
1532 }
1533
1534 query rendered_precise_capturing_args(def_id: DefId) -> Option<&'tcx [PreciseCapturingArgKind<Symbol, Symbol>]> {
1536 desc { |tcx| "rendering precise capturing args for `{}`", tcx.def_path_str(def_id) }
1537 separate_provide_extern
1538 }
1539
1540 query impl_parent(def_id: DefId) -> Option<DefId> {
1541 desc { |tcx| "computing specialization parent impl of `{}`", tcx.def_path_str(def_id) }
1542 separate_provide_extern
1543 }
1544
1545 query is_ctfe_mir_available(key: DefId) -> bool {
1546 desc { |tcx| "checking if item has CTFE MIR available: `{}`", tcx.def_path_str(key) }
1547 cache_on_disk_if { key.is_local() }
1548 separate_provide_extern
1549 }
1550 query is_mir_available(key: DefId) -> bool {
1551 desc { |tcx| "checking if item has MIR available: `{}`", tcx.def_path_str(key) }
1552 cache_on_disk_if { key.is_local() }
1553 separate_provide_extern
1554 }
1555
1556 query own_existential_vtable_entries(
1557 key: DefId
1558 ) -> &'tcx [DefId] {
1559 desc { |tcx| "finding all existential vtable entries for trait `{}`", tcx.def_path_str(key) }
1560 }
1561
1562 query vtable_entries(key: ty::TraitRef<'tcx>)
1563 -> &'tcx [ty::VtblEntry<'tcx>] {
1564 desc { |tcx| "finding all vtable entries for trait `{}`", tcx.def_path_str(key.def_id) }
1565 }
1566
1567 query first_method_vtable_slot(key: ty::TraitRef<'tcx>) -> usize {
1568 desc { |tcx| "finding the slot within the vtable of `{}` for the implementation of `{}`", key.self_ty(), key.print_only_trait_name() }
1569 }
1570
1571 query supertrait_vtable_slot(key: (Ty<'tcx>, Ty<'tcx>)) -> Option<usize> {
1572 desc { |tcx| "finding the slot within vtable for trait object `{}` vtable ptr during trait upcasting coercion from `{}` vtable",
1573 key.1, key.0 }
1574 }
1575
1576 query vtable_allocation(key: (Ty<'tcx>, Option<ty::ExistentialTraitRef<'tcx>>)) -> mir::interpret::AllocId {
1577 desc { |tcx| "vtable const allocation for <{} as {}>",
1578 key.0,
1579 key.1.map(|trait_ref| format!("{trait_ref}")).unwrap_or_else(|| "_".to_owned())
1580 }
1581 }
1582
1583 query codegen_select_candidate(
1584 key: PseudoCanonicalInput<'tcx, ty::TraitRef<'tcx>>
1585 ) -> Result<&'tcx ImplSource<'tcx, ()>, CodegenObligationError> {
1586 cache_on_disk_if { true }
1587 desc { |tcx| "computing candidate for `{}`", key.value }
1588 }
1589
1590 query all_local_trait_impls(_: ()) -> &'tcx rustc_data_structures::fx::FxIndexMap<DefId, Vec<LocalDefId>> {
1592 desc { "finding local trait impls" }
1593 }
1594
1595 query local_trait_impls(trait_id: DefId) -> &'tcx [LocalDefId] {
1597 desc { "finding local trait impls of `{}`", tcx.def_path_str(trait_id) }
1598 }
1599
1600 query trait_impls_of(trait_id: DefId) -> &'tcx ty::trait_def::TraitImpls {
1602 arena_cache
1603 desc { |tcx| "finding trait impls of `{}`", tcx.def_path_str(trait_id) }
1604 }
1605
1606 query specialization_graph_of(trait_id: DefId) -> Result<&'tcx specialization_graph::Graph, ErrorGuaranteed> {
1607 desc { |tcx| "building specialization graph of trait `{}`", tcx.def_path_str(trait_id) }
1608 cache_on_disk_if { true }
1609 return_result_from_ensure_ok
1610 }
1611 query dyn_compatibility_violations(trait_id: DefId) -> &'tcx [DynCompatibilityViolation] {
1612 desc { |tcx| "determining dyn-compatibility of trait `{}`", tcx.def_path_str(trait_id) }
1613 }
1614 query is_dyn_compatible(trait_id: DefId) -> bool {
1615 desc { |tcx| "checking if trait `{}` is dyn-compatible", tcx.def_path_str(trait_id) }
1616 }
1617
1618 query param_env(def_id: DefId) -> ty::ParamEnv<'tcx> {
1627 desc { |tcx| "computing normalized predicates of `{}`", tcx.def_path_str(def_id) }
1628 feedable
1629 }
1630
1631 query typing_env_normalized_for_post_analysis(def_id: DefId) -> ty::TypingEnv<'tcx> {
1635 desc { |tcx| "computing revealed normalized predicates of `{}`", tcx.def_path_str(def_id) }
1636 }
1637
1638 query is_copy_raw(env: ty::PseudoCanonicalInput<'tcx, Ty<'tcx>>) -> bool {
1641 desc { "computing whether `{}` is `Copy`", env.value }
1642 }
1643 query is_use_cloned_raw(env: ty::PseudoCanonicalInput<'tcx, Ty<'tcx>>) -> bool {
1646 desc { "computing whether `{}` is `UseCloned`", env.value }
1647 }
1648 query is_sized_raw(env: ty::PseudoCanonicalInput<'tcx, Ty<'tcx>>) -> bool {
1650 desc { "computing whether `{}` is `Sized`", env.value }
1651 }
1652 query is_freeze_raw(env: ty::PseudoCanonicalInput<'tcx, Ty<'tcx>>) -> bool {
1654 desc { "computing whether `{}` is freeze", env.value }
1655 }
1656 query is_unpin_raw(env: ty::PseudoCanonicalInput<'tcx, Ty<'tcx>>) -> bool {
1658 desc { "computing whether `{}` is `Unpin`", env.value }
1659 }
1660 query is_async_drop_raw(env: ty::PseudoCanonicalInput<'tcx, Ty<'tcx>>) -> bool {
1662 desc { "computing whether `{}` is `AsyncDrop`", env.value }
1663 }
1664 query needs_drop_raw(env: ty::PseudoCanonicalInput<'tcx, Ty<'tcx>>) -> bool {
1666 desc { "computing whether `{}` needs drop", env.value }
1667 }
1668 query needs_async_drop_raw(env: ty::PseudoCanonicalInput<'tcx, Ty<'tcx>>) -> bool {
1670 desc { "computing whether `{}` needs async drop", env.value }
1671 }
1672 query has_significant_drop_raw(env: ty::PseudoCanonicalInput<'tcx, Ty<'tcx>>) -> bool {
1674 desc { "computing whether `{}` has a significant drop", env.value }
1675 }
1676
1677 query has_structural_eq_impl(ty: Ty<'tcx>) -> bool {
1682 desc {
1683 "computing whether `{}` implements `StructuralPartialEq`",
1684 ty
1685 }
1686 }
1687
1688 query adt_drop_tys(def_id: DefId) -> Result<&'tcx ty::List<Ty<'tcx>>, AlwaysRequiresDrop> {
1692 desc { |tcx| "computing when `{}` needs drop", tcx.def_path_str(def_id) }
1693 cache_on_disk_if { true }
1694 }
1695
1696 query adt_async_drop_tys(def_id: DefId) -> Result<&'tcx ty::List<Ty<'tcx>>, AlwaysRequiresDrop> {
1700 desc { |tcx| "computing when `{}` needs async drop", tcx.def_path_str(def_id) }
1701 cache_on_disk_if { true }
1702 }
1703
1704 query adt_significant_drop_tys(def_id: DefId) -> Result<&'tcx ty::List<Ty<'tcx>>, AlwaysRequiresDrop> {
1711 desc { |tcx| "computing when `{}` has a significant destructor", tcx.def_path_str(def_id) }
1712 }
1713
1714 query list_significant_drop_tys(ty: ty::PseudoCanonicalInput<'tcx, Ty<'tcx>>) -> &'tcx ty::List<Ty<'tcx>> {
1732 desc { |tcx| "computing when `{}` has a significant destructor", ty.value }
1733 }
1734
1735 query layout_of(
1738 key: ty::PseudoCanonicalInput<'tcx, Ty<'tcx>>
1739 ) -> Result<ty::layout::TyAndLayout<'tcx>, &'tcx ty::layout::LayoutError<'tcx>> {
1740 depth_limit
1741 desc { "computing layout of `{}`", key.value }
1742 cycle_delay_bug
1744 }
1745
1746 query fn_abi_of_fn_ptr(
1751 key: ty::PseudoCanonicalInput<'tcx, (ty::PolyFnSig<'tcx>, &'tcx ty::List<Ty<'tcx>>)>
1752 ) -> Result<&'tcx rustc_target::callconv::FnAbi<'tcx, Ty<'tcx>>, &'tcx ty::layout::FnAbiError<'tcx>> {
1753 desc { "computing call ABI of `{}` function pointers", key.value.0 }
1754 }
1755
1756 query fn_abi_of_instance(
1762 key: ty::PseudoCanonicalInput<'tcx, (ty::Instance<'tcx>, &'tcx ty::List<Ty<'tcx>>)>
1763 ) -> Result<&'tcx rustc_target::callconv::FnAbi<'tcx, Ty<'tcx>>, &'tcx ty::layout::FnAbiError<'tcx>> {
1764 desc { "computing call ABI of `{}`", key.value.0 }
1765 }
1766
1767 query dylib_dependency_formats(_: CrateNum)
1768 -> &'tcx [(CrateNum, LinkagePreference)] {
1769 desc { "getting dylib dependency formats of crate" }
1770 separate_provide_extern
1771 }
1772
1773 query dependency_formats(_: ()) -> &'tcx Arc<crate::middle::dependency_format::Dependencies> {
1774 arena_cache
1775 desc { "getting the linkage format of all dependencies" }
1776 }
1777
1778 query is_compiler_builtins(_: CrateNum) -> bool {
1779 fatal_cycle
1780 desc { "checking if the crate is_compiler_builtins" }
1781 separate_provide_extern
1782 }
1783 query has_global_allocator(_: CrateNum) -> bool {
1784 eval_always
1786 fatal_cycle
1787 desc { "checking if the crate has_global_allocator" }
1788 separate_provide_extern
1789 }
1790 query has_alloc_error_handler(_: CrateNum) -> bool {
1791 eval_always
1793 fatal_cycle
1794 desc { "checking if the crate has_alloc_error_handler" }
1795 separate_provide_extern
1796 }
1797 query has_panic_handler(_: CrateNum) -> bool {
1798 fatal_cycle
1799 desc { "checking if the crate has_panic_handler" }
1800 separate_provide_extern
1801 }
1802 query is_profiler_runtime(_: CrateNum) -> bool {
1803 fatal_cycle
1804 desc { "checking if a crate is `#![profiler_runtime]`" }
1805 separate_provide_extern
1806 }
1807 query has_ffi_unwind_calls(key: LocalDefId) -> bool {
1808 desc { |tcx| "checking if `{}` contains FFI-unwind calls", tcx.def_path_str(key) }
1809 cache_on_disk_if { true }
1810 }
1811 query required_panic_strategy(_: CrateNum) -> Option<PanicStrategy> {
1812 fatal_cycle
1813 desc { "getting a crate's required panic strategy" }
1814 separate_provide_extern
1815 }
1816 query panic_in_drop_strategy(_: CrateNum) -> PanicStrategy {
1817 fatal_cycle
1818 desc { "getting a crate's configured panic-in-drop strategy" }
1819 separate_provide_extern
1820 }
1821 query is_no_builtins(_: CrateNum) -> bool {
1822 fatal_cycle
1823 desc { "getting whether a crate has `#![no_builtins]`" }
1824 separate_provide_extern
1825 }
1826 query symbol_mangling_version(_: CrateNum) -> SymbolManglingVersion {
1827 fatal_cycle
1828 desc { "getting a crate's symbol mangling version" }
1829 separate_provide_extern
1830 }
1831
1832 query extern_crate(def_id: CrateNum) -> Option<&'tcx ExternCrate> {
1833 eval_always
1834 desc { "getting crate's ExternCrateData" }
1835 separate_provide_extern
1836 }
1837
1838 query specialization_enabled_in(cnum: CrateNum) -> bool {
1839 desc { "checking whether the crate enabled `specialization`/`min_specialization`" }
1840 separate_provide_extern
1841 }
1842
1843 query specializes(_: (DefId, DefId)) -> bool {
1844 desc { "computing whether impls specialize one another" }
1845 }
1846 query in_scope_traits_map(_: hir::OwnerId)
1847 -> Option<&'tcx ItemLocalMap<Box<[TraitCandidate]>>> {
1848 desc { "getting traits in scope at a block" }
1849 }
1850
1851 query defaultness(def_id: DefId) -> hir::Defaultness {
1853 desc { |tcx| "looking up whether `{}` has `default`", tcx.def_path_str(def_id) }
1854 separate_provide_extern
1855 feedable
1856 }
1857
1858 query check_well_formed(key: LocalDefId) -> Result<(), ErrorGuaranteed> {
1859 desc { |tcx| "checking that `{}` is well-formed", tcx.def_path_str(key) }
1860 return_result_from_ensure_ok
1861 }
1862
1863 query enforce_impl_non_lifetime_params_are_constrained(key: LocalDefId) -> Result<(), ErrorGuaranteed> {
1864 desc { |tcx| "checking that `{}`'s generics are constrained by the impl header", tcx.def_path_str(key) }
1865 return_result_from_ensure_ok
1866 }
1867
1868 query reachable_non_generics(_: CrateNum)
1881 -> &'tcx DefIdMap<SymbolExportInfo> {
1882 arena_cache
1883 desc { "looking up the exported symbols of a crate" }
1884 separate_provide_extern
1885 }
1886 query is_reachable_non_generic(def_id: DefId) -> bool {
1887 desc { |tcx| "checking whether `{}` is an exported symbol", tcx.def_path_str(def_id) }
1888 cache_on_disk_if { def_id.is_local() }
1889 separate_provide_extern
1890 }
1891 query is_unreachable_local_definition(def_id: LocalDefId) -> bool {
1892 desc { |tcx|
1893 "checking whether `{}` is reachable from outside the crate",
1894 tcx.def_path_str(def_id),
1895 }
1896 }
1897
1898 query upstream_monomorphizations(_: ()) -> &'tcx DefIdMap<UnordMap<GenericArgsRef<'tcx>, CrateNum>> {
1906 arena_cache
1907 desc { "collecting available upstream monomorphizations" }
1908 }
1909
1910 query upstream_monomorphizations_for(def_id: DefId)
1918 -> Option<&'tcx UnordMap<GenericArgsRef<'tcx>, CrateNum>>
1919 {
1920 desc { |tcx|
1921 "collecting available upstream monomorphizations for `{}`",
1922 tcx.def_path_str(def_id),
1923 }
1924 separate_provide_extern
1925 }
1926
1927 query upstream_drop_glue_for(args: GenericArgsRef<'tcx>) -> Option<CrateNum> {
1943 desc { "available upstream drop-glue for `{:?}`", args }
1944 }
1945
1946 query upstream_async_drop_glue_for(args: GenericArgsRef<'tcx>) -> Option<CrateNum> {
1963 desc { "available upstream async-drop-glue for `{:?}`", args }
1964 }
1965
1966 query foreign_modules(_: CrateNum) -> &'tcx FxIndexMap<DefId, ForeignModule> {
1968 arena_cache
1969 desc { "looking up the foreign modules of a linked crate" }
1970 separate_provide_extern
1971 }
1972
1973 query clashing_extern_declarations(_: ()) {
1975 desc { "checking `extern fn` declarations are compatible" }
1976 }
1977
1978 query entry_fn(_: ()) -> Option<(DefId, EntryFnType)> {
1981 desc { "looking up the entry function of a crate" }
1982 }
1983
1984 query proc_macro_decls_static(_: ()) -> Option<LocalDefId> {
1986 desc { "looking up the proc macro declarations for a crate" }
1987 }
1988
1989 query crate_hash(_: CrateNum) -> Svh {
1997 eval_always
1998 desc { "looking up the hash a crate" }
1999 separate_provide_extern
2000 }
2001
2002 query crate_host_hash(_: CrateNum) -> Option<Svh> {
2004 eval_always
2005 desc { "looking up the hash of a host version of a crate" }
2006 separate_provide_extern
2007 }
2008
2009 query extra_filename(_: CrateNum) -> &'tcx String {
2012 arena_cache
2013 eval_always
2014 desc { "looking up the extra filename for a crate" }
2015 separate_provide_extern
2016 }
2017
2018 query crate_extern_paths(_: CrateNum) -> &'tcx Vec<PathBuf> {
2020 arena_cache
2021 eval_always
2022 desc { "looking up the paths for extern crates" }
2023 separate_provide_extern
2024 }
2025
2026 query implementations_of_trait(_: (CrateNum, DefId)) -> &'tcx [(DefId, Option<SimplifiedType>)] {
2029 desc { "looking up implementations of a trait in a crate" }
2030 separate_provide_extern
2031 }
2032
2033 query crate_incoherent_impls(key: (CrateNum, SimplifiedType)) -> &'tcx [DefId] {
2038 desc { |tcx| "collecting all impls for a type in a crate" }
2039 separate_provide_extern
2040 }
2041
2042 query native_library(def_id: DefId) -> Option<&'tcx NativeLib> {
2044 desc { |tcx| "getting the native library for `{}`", tcx.def_path_str(def_id) }
2045 }
2046
2047 query inherit_sig_for_delegation_item(def_id: LocalDefId) -> &'tcx [Ty<'tcx>] {
2048 desc { "inheriting delegation signature" }
2049 }
2050
2051 query resolve_bound_vars(owner_id: hir::OwnerId) -> &'tcx ResolveBoundVars {
2055 arena_cache
2056 desc { |tcx| "resolving lifetimes for `{}`", tcx.def_path_str(owner_id) }
2057 }
2058 query named_variable_map(owner_id: hir::OwnerId) -> &'tcx SortedMap<ItemLocalId, ResolvedArg> {
2059 desc { |tcx| "looking up a named region inside `{}`", tcx.def_path_str(owner_id) }
2060 }
2061 query is_late_bound_map(owner_id: hir::OwnerId) -> Option<&'tcx FxIndexSet<ItemLocalId>> {
2062 desc { |tcx| "testing if a region is late bound inside `{}`", tcx.def_path_str(owner_id) }
2063 }
2064 query object_lifetime_default(def_id: DefId) -> ObjectLifetimeDefault {
2079 desc { "looking up lifetime defaults for type parameter `{}`", tcx.def_path_str(def_id) }
2080 separate_provide_extern
2081 }
2082 query late_bound_vars_map(owner_id: hir::OwnerId)
2083 -> &'tcx SortedMap<ItemLocalId, Vec<ty::BoundVariableKind>> {
2084 desc { |tcx| "looking up late bound vars inside `{}`", tcx.def_path_str(owner_id) }
2085 }
2086 query opaque_captured_lifetimes(def_id: LocalDefId) -> &'tcx [(ResolvedArg, LocalDefId)] {
2101 desc { |tcx| "listing captured lifetimes for opaque `{}`", tcx.def_path_str(def_id) }
2102 }
2103
2104 query visibility(def_id: DefId) -> ty::Visibility<DefId> {
2117 desc { |tcx| "computing visibility of `{}`", tcx.def_path_str(def_id) }
2118 separate_provide_extern
2119 feedable
2120 }
2121
2122 query inhabited_predicate_adt(key: DefId) -> ty::inhabitedness::InhabitedPredicate<'tcx> {
2123 desc { "computing the uninhabited predicate of `{:?}`", key }
2124 }
2125
2126 query inhabited_predicate_type(key: Ty<'tcx>) -> ty::inhabitedness::InhabitedPredicate<'tcx> {
2128 desc { "computing the uninhabited predicate of `{}`", key }
2129 }
2130
2131 query dep_kind(_: CrateNum) -> CrateDepKind {
2132 eval_always
2133 desc { "fetching what a dependency looks like" }
2134 separate_provide_extern
2135 }
2136
2137 query crate_name(_: CrateNum) -> Symbol {
2139 feedable
2140 desc { "fetching what a crate is named" }
2141 separate_provide_extern
2142 }
2143 query module_children(def_id: DefId) -> &'tcx [ModChild] {
2144 desc { |tcx| "collecting child items of module `{}`", tcx.def_path_str(def_id) }
2145 separate_provide_extern
2146 }
2147 query extern_mod_stmt_cnum(def_id: LocalDefId) -> Option<CrateNum> {
2148 desc { |tcx| "computing crate imported by `{}`", tcx.def_path_str(def_id) }
2149 }
2150
2151 query num_extern_def_ids(_: CrateNum) -> usize {
2157 desc { "fetching the number of definitions in a crate" }
2158 separate_provide_extern
2159 }
2160
2161 query lib_features(_: CrateNum) -> &'tcx LibFeatures {
2162 desc { "calculating the lib features defined in a crate" }
2163 separate_provide_extern
2164 arena_cache
2165 }
2166 query stability_implications(_: CrateNum) -> &'tcx UnordMap<Symbol, Symbol> {
2167 arena_cache
2168 desc { "calculating the implications between `#[unstable]` features defined in a crate" }
2169 separate_provide_extern
2170 }
2171 query intrinsic_raw(def_id: DefId) -> Option<rustc_middle::ty::IntrinsicDef> {
2173 desc { |tcx| "fetch intrinsic name if `{}` is an intrinsic", tcx.def_path_str(def_id) }
2174 separate_provide_extern
2175 }
2176 query get_lang_items(_: ()) -> &'tcx LanguageItems {
2178 arena_cache
2179 eval_always
2180 desc { "calculating the lang items map" }
2181 }
2182
2183 query all_diagnostic_items(_: ()) -> &'tcx rustc_hir::diagnostic_items::DiagnosticItems {
2185 arena_cache
2186 eval_always
2187 desc { "calculating the diagnostic items map" }
2188 }
2189
2190 query defined_lang_items(_: CrateNum) -> &'tcx [(DefId, LangItem)] {
2192 desc { "calculating the lang items defined in a crate" }
2193 separate_provide_extern
2194 }
2195
2196 query diagnostic_items(_: CrateNum) -> &'tcx rustc_hir::diagnostic_items::DiagnosticItems {
2198 arena_cache
2199 desc { "calculating the diagnostic items map in a crate" }
2200 separate_provide_extern
2201 }
2202
2203 query missing_lang_items(_: CrateNum) -> &'tcx [LangItem] {
2204 desc { "calculating the missing lang items in a crate" }
2205 separate_provide_extern
2206 }
2207
2208 query visible_parent_map(_: ()) -> &'tcx DefIdMap<DefId> {
2213 arena_cache
2214 desc { "calculating the visible parent map" }
2215 }
2216 query trimmed_def_paths(_: ()) -> &'tcx DefIdMap<Symbol> {
2219 arena_cache
2220 desc { "calculating trimmed def paths" }
2221 }
2222 query missing_extern_crate_item(_: CrateNum) -> bool {
2223 eval_always
2224 desc { "seeing if we're missing an `extern crate` item for this crate" }
2225 separate_provide_extern
2226 }
2227 query used_crate_source(_: CrateNum) -> &'tcx Arc<CrateSource> {
2228 arena_cache
2229 eval_always
2230 desc { "looking at the source for a crate" }
2231 separate_provide_extern
2232 }
2233
2234 query debugger_visualizers(_: CrateNum) -> &'tcx Vec<DebuggerVisualizerFile> {
2239 arena_cache
2240 desc { "looking up the debugger visualizers for this crate" }
2241 separate_provide_extern
2242 eval_always
2243 }
2244
2245 query postorder_cnums(_: ()) -> &'tcx [CrateNum] {
2246 eval_always
2247 desc { "generating a postorder list of CrateNums" }
2248 }
2249 query is_private_dep(c: CrateNum) -> bool {
2252 eval_always
2253 desc { "checking whether crate `{}` is a private dependency", c }
2254 separate_provide_extern
2255 }
2256 query allocator_kind(_: ()) -> Option<AllocatorKind> {
2257 eval_always
2258 desc { "getting the allocator kind for the current crate" }
2259 }
2260 query alloc_error_handler_kind(_: ()) -> Option<AllocatorKind> {
2261 eval_always
2262 desc { "alloc error handler kind for the current crate" }
2263 }
2264
2265 query upvars_mentioned(def_id: DefId) -> Option<&'tcx FxIndexMap<hir::HirId, hir::Upvar>> {
2266 desc { |tcx| "collecting upvars mentioned in `{}`", tcx.def_path_str(def_id) }
2267 }
2268 query maybe_unused_trait_imports(_: ()) -> &'tcx FxIndexSet<LocalDefId> {
2269 desc { "fetching potentially unused trait imports" }
2270 }
2271 query names_imported_by_glob_use(def_id: LocalDefId) -> &'tcx FxIndexSet<Symbol> {
2272 desc { |tcx| "finding names imported by glob use for `{}`", tcx.def_path_str(def_id) }
2273 }
2274
2275 query stability_index(_: ()) -> &'tcx stability::Index {
2276 arena_cache
2277 eval_always
2278 desc { "calculating the stability index for the local crate" }
2279 }
2280 query crates(_: ()) -> &'tcx [CrateNum] {
2283 eval_always
2284 desc { "fetching all foreign CrateNum instances" }
2285 }
2286 query used_crates(_: ()) -> &'tcx [CrateNum] {
2290 eval_always
2291 desc { "fetching `CrateNum`s for all crates loaded non-speculatively" }
2292 }
2293
2294 query traits(_: CrateNum) -> &'tcx [DefId] {
2296 desc { "fetching all traits in a crate" }
2297 separate_provide_extern
2298 }
2299
2300 query trait_impls_in_crate(_: CrateNum) -> &'tcx [DefId] {
2301 desc { "fetching all trait impls in a crate" }
2302 separate_provide_extern
2303 }
2304
2305 query stable_order_of_exportable_impls(_: CrateNum) -> &'tcx FxIndexMap<DefId, usize> {
2306 desc { "fetching the stable impl's order" }
2307 separate_provide_extern
2308 }
2309
2310 query exportable_items(_: CrateNum) -> &'tcx [DefId] {
2311 desc { "fetching all exportable items in a crate" }
2312 separate_provide_extern
2313 }
2314
2315 query exported_symbols(cnum: CrateNum) -> &'tcx [(ExportedSymbol<'tcx>, SymbolExportInfo)] {
2321 desc { "collecting exported symbols for crate `{}`", cnum}
2322 cache_on_disk_if { *cnum == LOCAL_CRATE }
2323 separate_provide_extern
2324 }
2325
2326 query collect_and_partition_mono_items(_: ()) -> MonoItemPartitions<'tcx> {
2327 eval_always
2328 desc { "collect_and_partition_mono_items" }
2329 }
2330
2331 query is_codegened_item(def_id: DefId) -> bool {
2332 desc { |tcx| "determining whether `{}` needs codegen", tcx.def_path_str(def_id) }
2333 }
2334
2335 query codegen_unit(sym: Symbol) -> &'tcx CodegenUnit<'tcx> {
2336 desc { "getting codegen unit `{sym}`" }
2337 }
2338
2339 query backend_optimization_level(_: ()) -> OptLevel {
2340 desc { "optimization level used by backend" }
2341 }
2342
2343 query output_filenames(_: ()) -> &'tcx Arc<OutputFilenames> {
2348 feedable
2349 desc { "getting output filenames" }
2350 arena_cache
2351 }
2352
2353 query normalize_canonicalized_projection_ty(
2359 goal: CanonicalAliasGoal<'tcx>
2360 ) -> Result<
2361 &'tcx Canonical<'tcx, canonical::QueryResponse<'tcx, NormalizationResult<'tcx>>>,
2362 NoSolution,
2363 > {
2364 desc { "normalizing `{}`", goal.canonical.value.value }
2365 }
2366
2367 query normalize_canonicalized_free_alias(
2373 goal: CanonicalAliasGoal<'tcx>
2374 ) -> Result<
2375 &'tcx Canonical<'tcx, canonical::QueryResponse<'tcx, NormalizationResult<'tcx>>>,
2376 NoSolution,
2377 > {
2378 desc { "normalizing `{}`", goal.canonical.value.value }
2379 }
2380
2381 query normalize_canonicalized_inherent_projection_ty(
2387 goal: CanonicalAliasGoal<'tcx>
2388 ) -> Result<
2389 &'tcx Canonical<'tcx, canonical::QueryResponse<'tcx, NormalizationResult<'tcx>>>,
2390 NoSolution,
2391 > {
2392 desc { "normalizing `{}`", goal.canonical.value.value }
2393 }
2394
2395 query try_normalize_generic_arg_after_erasing_regions(
2397 goal: PseudoCanonicalInput<'tcx, GenericArg<'tcx>>
2398 ) -> Result<GenericArg<'tcx>, NoSolution> {
2399 desc { "normalizing `{}`", goal.value }
2400 }
2401
2402 query implied_outlives_bounds(
2403 key: (CanonicalImpliedOutlivesBoundsGoal<'tcx>, bool)
2404 ) -> Result<
2405 &'tcx Canonical<'tcx, canonical::QueryResponse<'tcx, Vec<OutlivesBound<'tcx>>>>,
2406 NoSolution,
2407 > {
2408 desc { "computing implied outlives bounds for `{}` (hack disabled = {:?})", key.0.canonical.value.value.ty, key.1 }
2409 }
2410
2411 query dropck_outlives(
2414 goal: CanonicalDropckOutlivesGoal<'tcx>
2415 ) -> Result<
2416 &'tcx Canonical<'tcx, canonical::QueryResponse<'tcx, DropckOutlivesResult<'tcx>>>,
2417 NoSolution,
2418 > {
2419 desc { "computing dropck types for `{}`", goal.canonical.value.value.dropped_ty }
2420 }
2421
2422 query evaluate_obligation(
2425 goal: CanonicalPredicateGoal<'tcx>
2426 ) -> Result<EvaluationResult, OverflowError> {
2427 desc { "evaluating trait selection obligation `{}`", goal.canonical.value.value }
2428 }
2429
2430 query type_op_ascribe_user_type(
2432 goal: CanonicalTypeOpAscribeUserTypeGoal<'tcx>
2433 ) -> Result<
2434 &'tcx Canonical<'tcx, canonical::QueryResponse<'tcx, ()>>,
2435 NoSolution,
2436 > {
2437 desc { "evaluating `type_op_ascribe_user_type` `{:?}`", goal.canonical.value.value }
2438 }
2439
2440 query type_op_prove_predicate(
2442 goal: CanonicalTypeOpProvePredicateGoal<'tcx>
2443 ) -> Result<
2444 &'tcx Canonical<'tcx, canonical::QueryResponse<'tcx, ()>>,
2445 NoSolution,
2446 > {
2447 desc { "evaluating `type_op_prove_predicate` `{:?}`", goal.canonical.value.value }
2448 }
2449
2450 query type_op_normalize_ty(
2452 goal: CanonicalTypeOpNormalizeGoal<'tcx, Ty<'tcx>>
2453 ) -> Result<
2454 &'tcx Canonical<'tcx, canonical::QueryResponse<'tcx, Ty<'tcx>>>,
2455 NoSolution,
2456 > {
2457 desc { "normalizing `{}`", goal.canonical.value.value.value }
2458 }
2459
2460 query type_op_normalize_clause(
2462 goal: CanonicalTypeOpNormalizeGoal<'tcx, ty::Clause<'tcx>>
2463 ) -> Result<
2464 &'tcx Canonical<'tcx, canonical::QueryResponse<'tcx, ty::Clause<'tcx>>>,
2465 NoSolution,
2466 > {
2467 desc { "normalizing `{:?}`", goal.canonical.value.value.value }
2468 }
2469
2470 query type_op_normalize_poly_fn_sig(
2472 goal: CanonicalTypeOpNormalizeGoal<'tcx, ty::PolyFnSig<'tcx>>
2473 ) -> Result<
2474 &'tcx Canonical<'tcx, canonical::QueryResponse<'tcx, ty::PolyFnSig<'tcx>>>,
2475 NoSolution,
2476 > {
2477 desc { "normalizing `{:?}`", goal.canonical.value.value.value }
2478 }
2479
2480 query type_op_normalize_fn_sig(
2482 goal: CanonicalTypeOpNormalizeGoal<'tcx, ty::FnSig<'tcx>>
2483 ) -> Result<
2484 &'tcx Canonical<'tcx, canonical::QueryResponse<'tcx, ty::FnSig<'tcx>>>,
2485 NoSolution,
2486 > {
2487 desc { "normalizing `{:?}`", goal.canonical.value.value.value }
2488 }
2489
2490 query instantiate_and_check_impossible_predicates(key: (DefId, GenericArgsRef<'tcx>)) -> bool {
2491 desc { |tcx|
2492 "checking impossible instantiated predicates: `{}`",
2493 tcx.def_path_str(key.0)
2494 }
2495 }
2496
2497 query is_impossible_associated_item(key: (DefId, DefId)) -> bool {
2498 desc { |tcx|
2499 "checking if `{}` is impossible to reference within `{}`",
2500 tcx.def_path_str(key.1),
2501 tcx.def_path_str(key.0),
2502 }
2503 }
2504
2505 query method_autoderef_steps(
2506 goal: CanonicalTyGoal<'tcx>
2507 ) -> MethodAutoderefStepsResult<'tcx> {
2508 desc { "computing autoderef types for `{}`", goal.canonical.value.value }
2509 }
2510
2511 query rust_target_features(_: CrateNum) -> &'tcx UnordMap<String, rustc_target::target_features::Stability> {
2513 arena_cache
2514 eval_always
2515 desc { "looking up Rust target features" }
2516 }
2517
2518 query implied_target_features(feature: Symbol) -> &'tcx Vec<Symbol> {
2519 arena_cache
2520 eval_always
2521 desc { "looking up implied target features" }
2522 }
2523
2524 query features_query(_: ()) -> &'tcx rustc_feature::Features {
2525 feedable
2526 desc { "looking up enabled feature gates" }
2527 }
2528
2529 query crate_for_resolver((): ()) -> &'tcx Steal<(rustc_ast::Crate, rustc_ast::AttrVec)> {
2530 feedable
2531 no_hash
2532 desc { "the ast before macro expansion and name resolution" }
2533 }
2534
2535 query resolve_instance_raw(
2545 key: ty::PseudoCanonicalInput<'tcx, (DefId, GenericArgsRef<'tcx>)>
2546 ) -> Result<Option<ty::Instance<'tcx>>, ErrorGuaranteed> {
2547 desc { "resolving instance `{}`", ty::Instance::new_raw(key.value.0, key.value.1) }
2548 }
2549
2550 query reveal_opaque_types_in_bounds(key: ty::Clauses<'tcx>) -> ty::Clauses<'tcx> {
2551 desc { "revealing opaque types in `{:?}`", key }
2552 }
2553
2554 query limits(key: ()) -> Limits {
2555 desc { "looking up limits" }
2556 }
2557
2558 query diagnostic_hir_wf_check(
2567 key: (ty::Predicate<'tcx>, WellFormedLoc)
2568 ) -> Option<&'tcx ObligationCause<'tcx>> {
2569 arena_cache
2570 eval_always
2571 no_hash
2572 desc { "performing HIR wf-checking for predicate `{:?}` at item `{:?}`", key.0, key.1 }
2573 }
2574
2575 query global_backend_features(_: ()) -> &'tcx Vec<String> {
2578 arena_cache
2579 eval_always
2580 desc { "computing the backend features for CLI flags" }
2581 }
2582
2583 query check_validity_requirement(key: (ValidityRequirement, ty::PseudoCanonicalInput<'tcx, Ty<'tcx>>)) -> Result<bool, &'tcx ty::layout::LayoutError<'tcx>> {
2584 desc { "checking validity requirement for `{}`: {}", key.1.value, key.0 }
2585 }
2586
2587 query compare_impl_item(key: LocalDefId) -> Result<(), ErrorGuaranteed> {
2592 desc { |tcx| "checking assoc item `{}` is compatible with trait definition", tcx.def_path_str(key) }
2593 return_result_from_ensure_ok
2594 }
2595
2596 query deduced_param_attrs(def_id: DefId) -> &'tcx [ty::DeducedParamAttrs] {
2597 desc { |tcx| "deducing parameter attributes for {}", tcx.def_path_str(def_id) }
2598 separate_provide_extern
2599 }
2600
2601 query doc_link_resolutions(def_id: DefId) -> &'tcx DocLinkResMap {
2602 eval_always
2603 desc { "resolutions for documentation links for a module" }
2604 separate_provide_extern
2605 }
2606
2607 query doc_link_traits_in_scope(def_id: DefId) -> &'tcx [DefId] {
2608 eval_always
2609 desc { "traits in scope for documentation links for a module" }
2610 separate_provide_extern
2611 }
2612
2613 query stripped_cfg_items(cnum: CrateNum) -> &'tcx [StrippedCfgItem] {
2617 desc { "getting cfg-ed out item names" }
2618 separate_provide_extern
2619 }
2620
2621 query generics_require_sized_self(def_id: DefId) -> bool {
2622 desc { "check whether the item has a `where Self: Sized` bound" }
2623 }
2624
2625 query cross_crate_inlinable(def_id: DefId) -> bool {
2626 desc { "whether the item should be made inlinable across crates" }
2627 separate_provide_extern
2628 }
2629
2630 query check_mono_item(key: ty::Instance<'tcx>) {
2634 desc { "monomorphization-time checking" }
2635 }
2636
2637 query skip_move_check_fns(_: ()) -> &'tcx FxIndexSet<DefId> {
2639 arena_cache
2640 desc { "functions to skip for move-size check" }
2641 }
2642
2643 query items_of_instance(key: (ty::Instance<'tcx>, CollectionMode)) -> (&'tcx [Spanned<MonoItem<'tcx>>], &'tcx [Spanned<MonoItem<'tcx>>]) {
2644 desc { "collecting items used by `{}`", key.0 }
2645 cache_on_disk_if { true }
2646 }
2647
2648 query size_estimate(key: ty::Instance<'tcx>) -> usize {
2649 desc { "estimating codegen size of `{}`", key }
2650 cache_on_disk_if { true }
2651 }
2652
2653 query anon_const_kind(def_id: DefId) -> ty::AnonConstKind {
2654 desc { |tcx| "looking up anon const kind of `{}`", tcx.def_path_str(def_id) }
2655 separate_provide_extern
2656 }
2657}
2658
2659rustc_with_all_queries! { define_callbacks! }
2660rustc_feedable_queries! { define_feedable! }