Skip to content

Commit 0b7b454

Browse files
committed
Combine input and eval_always query types
1 parent fbd34ef commit 0b7b454

File tree

4 files changed

+45
-84
lines changed

4 files changed

+45
-84
lines changed

src/librustc/dep_graph/dep_node.rs

+29-47
Original file line numberDiff line numberDiff line change
@@ -85,11 +85,6 @@ macro_rules! is_anon_attr {
8585
($attr:ident) => (false);
8686
}
8787

88-
macro_rules! is_input_attr {
89-
(input) => (true);
90-
($attr:ident) => (false);
91-
}
92-
9388
macro_rules! is_eval_always_attr {
9489
(eval_always) => (true);
9590
($attr:ident) => (false);
@@ -99,10 +94,6 @@ macro_rules! contains_anon_attr {
9994
($($attr:ident),*) => ({$(is_anon_attr!($attr) | )* false});
10095
}
10196

102-
macro_rules! contains_input_attr {
103-
($($attr:ident),*) => ({$(is_input_attr!($attr) | )* false});
104-
}
105-
10697
macro_rules! contains_eval_always_attr {
10798
($($attr:ident),*) => ({$(is_eval_always_attr!($attr) | )* false});
10899
}
@@ -151,7 +142,7 @@ macro_rules! define_dep_nodes {
151142
}
152143
}
153144

154-
// FIXME: Make `is_anon`, `is_input`, `is_eval_always` and `has_params` properties
145+
// FIXME: Make `is_anon`, `is_eval_always` and `has_params` properties
155146
// of queries
156147
#[inline(always)]
157148
pub fn is_anon(&self) -> bool {
@@ -162,15 +153,6 @@ macro_rules! define_dep_nodes {
162153
}
163154
}
164155

165-
#[inline(always)]
166-
pub fn is_input(&self) -> bool {
167-
match *self {
168-
$(
169-
DepKind :: $variant => { contains_input_attr!($($attr),*) }
170-
)*
171-
}
172-
}
173-
174156
#[inline(always)]
175157
pub fn is_eval_always(&self) -> bool {
176158
match *self {
@@ -438,17 +420,17 @@ rustc_dep_node_append!([define_dep_nodes!][ <'tcx>
438420
// suitable wrapper, you can use `tcx.dep_graph.ignore()` to gain
439421
// access to the krate, but you must remember to add suitable
440422
// edges yourself for the individual items that you read.
441-
[input] Krate,
423+
[eval_always] Krate,
442424

443425
// Represents the body of a function or method. The def-id is that of the
444426
// function/method.
445-
[input] HirBody(DefId),
427+
[eval_always] HirBody(DefId),
446428

447429
// Represents the HIR node with the given node-id
448-
[input] Hir(DefId),
430+
[eval_always] Hir(DefId),
449431

450432
// Represents metadata from an extern crate.
451-
[input] CrateMetadata(CrateNum),
433+
[eval_always] CrateMetadata(CrateNum),
452434

453435
// Represents different phases in the compiler.
454436
[] RegionScopeTree(DefId),
@@ -533,7 +515,7 @@ rustc_dep_node_append!([define_dep_nodes!][ <'tcx>
533515
// The set of impls for a given trait.
534516
[] TraitImpls(DefId),
535517

536-
[input] AllLocalTraitImpls,
518+
[eval_always] AllLocalTraitImpls,
537519

538520
[anon] TraitSelect,
539521

@@ -545,7 +527,7 @@ rustc_dep_node_append!([define_dep_nodes!][ <'tcx>
545527
// to make type debuginfo to be source location independent. Declaring
546528
// DefSpan an input makes sure that changes to these are always detected
547529
// regardless of HIR hashing.
548-
[input] DefSpan(DefId),
530+
[eval_always] DefSpan(DefId),
549531
[] LookupStability(DefId),
550532
[] LookupDeprecationEntry(DefId),
551533
[] ConstIsRvaluePromotableToStatic(DefId),
@@ -563,10 +545,10 @@ rustc_dep_node_append!([define_dep_nodes!][ <'tcx>
563545
[] IsCompilerBuiltins(CrateNum),
564546
[] HasGlobalAllocator(CrateNum),
565547
[] HasPanicHandler(CrateNum),
566-
[input] ExternCrate(DefId),
548+
[eval_always] ExternCrate(DefId),
567549
[] Specializes { impl1: DefId, impl2: DefId },
568-
[input] InScopeTraits(DefIndex),
569-
[input] ModuleExports(DefId),
550+
[eval_always] InScopeTraits(DefIndex),
551+
[eval_always] ModuleExports(DefId),
570552
[] IsSanitizerRuntime(CrateNum),
571553
[] IsProfilerRuntime(CrateNum),
572554
[] GetPanicStrategy(CrateNum),
@@ -579,10 +561,10 @@ rustc_dep_node_append!([define_dep_nodes!][ <'tcx>
579561
[] EntryFn(CrateNum),
580562
[] PluginRegistrarFn(CrateNum),
581563
[] ProcMacroDeclsStatic(CrateNum),
582-
[input] CrateDisambiguator(CrateNum),
583-
[input] CrateHash(CrateNum),
584-
[input] OriginalCrateName(CrateNum),
585-
[input] ExtraFileName(CrateNum),
564+
[eval_always] CrateDisambiguator(CrateNum),
565+
[eval_always] CrateHash(CrateNum),
566+
[eval_always] OriginalCrateName(CrateNum),
567+
[eval_always] ExtraFileName(CrateNum),
586568

587569
[] ImplementationsOfTrait { krate: CrateNum, trait_id: DefId },
588570
[] AllTraitImplementations(CrateNum),
@@ -591,16 +573,16 @@ rustc_dep_node_append!([define_dep_nodes!][ <'tcx>
591573
[] IsDllimportForeignItem(DefId),
592574
[] IsStaticallyIncludedForeignItem(DefId),
593575
[] NativeLibraryKind(DefId),
594-
[input] LinkArgs,
576+
[eval_always] LinkArgs,
595577

596578
[] ResolveLifetimes(CrateNum),
597579
[] NamedRegion(DefIndex),
598580
[] IsLateBound(DefIndex),
599581
[] ObjectLifetimeDefaults(DefIndex),
600582

601583
[] Visibility(DefId),
602-
[input] DepKind(CrateNum),
603-
[input] CrateName(CrateNum),
584+
[eval_always] DepKind(CrateNum),
585+
[eval_always] CrateName(CrateNum),
604586
[] ItemChildren(DefId),
605587
[] ExternModStmtCnum(DefId),
606588
[eval_always] GetLibFeatures,
@@ -609,24 +591,24 @@ rustc_dep_node_append!([define_dep_nodes!][ <'tcx>
609591
[] DefinedLangItems(CrateNum),
610592
[] MissingLangItems(CrateNum),
611593
[] VisibleParentMap,
612-
[input] MissingExternCrateItem(CrateNum),
613-
[input] UsedCrateSource(CrateNum),
614-
[input] PostorderCnums,
615-
616-
[input] Freevars(DefId),
617-
[input] MaybeUnusedTraitImport(DefId),
618-
[input] MaybeUnusedExternCrates,
619-
[input] NamesImportedByGlobUse(DefId),
594+
[eval_always] MissingExternCrateItem(CrateNum),
595+
[eval_always] UsedCrateSource(CrateNum),
596+
[eval_always] PostorderCnums,
597+
598+
[eval_always] Freevars(DefId),
599+
[eval_always] MaybeUnusedTraitImport(DefId),
600+
[eval_always] MaybeUnusedExternCrates,
601+
[eval_always] NamesImportedByGlobUse(DefId),
620602
[eval_always] StabilityIndex,
621603
[eval_always] AllTraits,
622-
[input] AllCrateNums,
604+
[eval_always] AllCrateNums,
623605
[] ExportedSymbols(CrateNum),
624606
[eval_always] CollectAndPartitionMonoItems,
625607
[] IsCodegenedItem(DefId),
626608
[] CodegenUnit(InternedString),
627609
[] BackendOptimizationLevel(CrateNum),
628610
[] CompileCodegenUnit(InternedString),
629-
[input] OutputFilenames,
611+
[eval_always] OutputFilenames,
630612
[] NormalizeProjectionTy(CanonicalProjectionGoal<'tcx>),
631613
[] NormalizeTyAfterErasingRegions(ParamEnvAnd<'tcx, Ty<'tcx>>),
632614
[] ImpliedOutlivesBounds(CanonicalTyGoal<'tcx>),
@@ -645,11 +627,11 @@ rustc_dep_node_append!([define_dep_nodes!][ <'tcx>
645627
[] SubstituteNormalizeAndTestPredicates { key: (DefId, SubstsRef<'tcx>) },
646628
[] MethodAutoderefSteps(CanonicalTyGoal<'tcx>),
647629

648-
[input] TargetFeaturesWhitelist,
630+
[eval_always] TargetFeaturesWhitelist,
649631

650632
[] InstanceDefSizeEstimate { instance_def: InstanceDef<'tcx> },
651633

652-
[input] Features,
634+
[eval_always] Features,
653635

654636
[] ForeignModules(CrateNum),
655637

src/librustc/dep_graph/graph.rs

+8-33
Original file line numberDiff line numberDiff line change
@@ -388,10 +388,7 @@ impl DepGraph {
388388
|_| None,
389389
|data, key, fingerprint, _| {
390390
let mut current = data.borrow_mut();
391-
let krate_idx = current.node_to_node_index[
392-
&DepNode::new_no_params(DepKind::Krate)
393-
];
394-
current.alloc_node(key, smallvec![krate_idx], fingerprint)
391+
current.alloc_node(key, smallvec![], fingerprint)
395392
},
396393
hash_result)
397394
}
@@ -576,7 +573,7 @@ impl DepGraph {
576573
tcx: TyCtxt<'_, '_, '_>,
577574
dep_node: &DepNode
578575
) -> Option<(SerializedDepNodeIndex, DepNodeIndex)> {
579-
debug_assert!(!dep_node.kind.is_input());
576+
debug_assert!(!dep_node.kind.is_eval_always());
580577

581578
// Return None if the dep graph is disabled
582579
let data = self.data.as_ref()?;
@@ -620,8 +617,8 @@ impl DepGraph {
620617
debug_assert!(data.colors.get(prev_dep_node_index).is_none());
621618
}
622619

623-
// We never try to mark inputs as green
624-
debug_assert!(!dep_node.kind.is_input());
620+
// We never try to mark eval_always nodes as green
621+
debug_assert!(!dep_node.kind.is_eval_always());
625622

626623
debug_assert_eq!(data.previous.index_to_node(prev_dep_node_index), *dep_node);
627624

@@ -658,8 +655,8 @@ impl DepGraph {
658655
let dep_dep_node = &data.previous.index_to_node(dep_dep_node_index);
659656

660657
// We don't know the state of this dependency. If it isn't
661-
// an input node, let's try to mark it green recursively.
662-
if !dep_dep_node.kind.is_input() {
658+
// an eval_always node, let's try to mark it green recursively.
659+
if !dep_dep_node.kind.is_eval_always() {
663660
debug!("try_mark_previous_green({:?}) --- state of dependency {:?} \
664661
is unknown, trying to mark it green", dep_node,
665662
dep_dep_node);
@@ -694,7 +691,7 @@ impl DepGraph {
694691
}
695692
}
696693
_ => {
697-
// For other kinds of inputs it's OK to be
694+
// For other kinds of nodes it's OK to be
698695
// forced.
699696
}
700697
}
@@ -1017,33 +1014,11 @@ impl CurrentDepGraph {
10171014
task_deps: TaskDeps,
10181015
fingerprint: Fingerprint
10191016
) -> DepNodeIndex {
1020-
// If this is an input node, we expect that it either has no
1021-
// dependencies, or that it just depends on DepKind::CrateMetadata
1022-
// or DepKind::Krate. This happens for some "thin wrapper queries"
1023-
// like `crate_disambiguator` which sometimes have zero deps (for
1024-
// when called for LOCAL_CRATE) or they depend on a CrateMetadata
1025-
// node.
1026-
if cfg!(debug_assertions) {
1027-
if node.kind.is_input() && task_deps.reads.len() > 0 &&
1028-
// FIXME(mw): Special case for DefSpan until Spans are handled
1029-
// better in general.
1030-
node.kind != DepKind::DefSpan &&
1031-
task_deps.reads.iter().any(|&i| {
1032-
!(self.data[i].node.kind == DepKind::CrateMetadata ||
1033-
self.data[i].node.kind == DepKind::Krate)
1034-
})
1035-
{
1036-
bug!("Input node {:?} with unexpected reads: {:?}",
1037-
node,
1038-
task_deps.reads.iter().map(|&i| self.data[i].node).collect::<Vec<_>>())
1039-
}
1040-
}
1041-
10421017
self.alloc_node(node, task_deps.reads, fingerprint)
10431018
}
10441019

10451020
fn complete_anon_task(&mut self, kind: DepKind, task_deps: TaskDeps) -> DepNodeIndex {
1046-
debug_assert!(!kind.is_input());
1021+
debug_assert!(!kind.is_eval_always());
10471022

10481023
let mut fingerprint = self.anon_id_seed;
10491024
let mut hasher = StableHasher::new();

src/librustc/hir/map/mod.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -153,7 +153,7 @@ impl Forest {
153153
&self.krate
154154
}
155155

156-
/// This is internally in the depedency tracking system.
156+
/// This is used internally in the dependency tracking system.
157157
/// Use the `krate` method to ensure your dependency on the
158158
/// crate is tracked.
159159
pub fn untracked_krate<'hir>(&'hir self) -> &'hir Crate {

src/librustc/ty/query/plumbing.rs

+7-3
Original file line numberDiff line numberDiff line change
@@ -414,7 +414,7 @@ impl<'a, 'gcx, 'tcx> TyCtxt<'a, 'gcx, 'tcx> {
414414
return result;
415415
}
416416

417-
if !dep_node.kind.is_input() {
417+
if !dep_node.kind.is_eval_always() {
418418
// The diagnostics for this query will be
419419
// promoted to the current session during
420420
// try_mark_green(), so we can ignore them here.
@@ -601,9 +601,13 @@ impl<'a, 'gcx, 'tcx> TyCtxt<'a, 'gcx, 'tcx> {
601601
pub(super) fn ensure_query<Q: QueryDescription<'gcx>>(self, key: Q::Key) -> () {
602602
let dep_node = Q::to_dep_node(self, &key);
603603

604-
// Ensuring an "input" or anonymous query makes no sense
604+
if dep_node.kind.is_eval_always() {
605+
let _ = self.get_query::<Q>(DUMMY_SP, key);
606+
return;
607+
}
608+
609+
// Ensuring an anonymous query makes no sense
605610
assert!(!dep_node.kind.is_anon());
606-
assert!(!dep_node.kind.is_input());
607611
if self.dep_graph.try_mark_green_and_read(self, &dep_node).is_none() {
608612
// A None return from `try_mark_green_and_read` means that this is either
609613
// a new dep node or that the dep node has already been marked red.

0 commit comments

Comments
 (0)