diff options
| author | John Kåre Alsaker <john.kare.alsaker@gmail.com> | 2019-03-20 17:22:16 +0100 |
|---|---|---|
| committer | John Kåre Alsaker <john.kare.alsaker@gmail.com> | 2019-03-20 17:22:16 +0100 |
| commit | 4d0a1e418c8ba90adc9703b1adf735d6d134c2b4 (patch) | |
| tree | 36c823bdfbb20758cadba8bca918de9cb5c666a6 | |
| parent | 52374a6462e225cdc4a0487b6c843ce72ab8551f (diff) | |
| download | rust-4d0a1e418c8ba90adc9703b1adf735d6d134c2b4.tar.gz rust-4d0a1e418c8ba90adc9703b1adf735d6d134c2b4.zip | |
Add eval_always to query macro and move a query over
| -rw-r--r-- | src/librustc/dep_graph/dep_node.rs | 1 | ||||
| -rw-r--r-- | src/librustc/query/mod.rs | 5 | ||||
| -rw-r--r-- | src/librustc/ty/query/config.rs | 6 | ||||
| -rw-r--r-- | src/librustc/ty/query/mod.rs | 5 | ||||
| -rw-r--r-- | src/librustc/ty/query/plumbing.rs | 1 | ||||
| -rw-r--r-- | src/librustc_macros/src/query.rs | 20 |
6 files changed, 25 insertions, 13 deletions
diff --git a/src/librustc/dep_graph/dep_node.rs b/src/librustc/dep_graph/dep_node.rs index cdbd01620fb..4babadb67bc 100644 --- a/src/librustc/dep_graph/dep_node.rs +++ b/src/librustc/dep_graph/dep_node.rs @@ -564,7 +564,6 @@ rustc_dep_node_append!([define_dep_nodes!][ <'tcx> [] HasGlobalAllocator(CrateNum), [] HasPanicHandler(CrateNum), [input] ExternCrate(DefId), - [eval_always] LintLevels, [] Specializes { impl1: DefId, impl2: DefId }, [input] InScopeTraits(DefIndex), [input] ModuleExports(DefId), diff --git a/src/librustc/query/mod.rs b/src/librustc/query/mod.rs index b8c91f91934..8d64818f49b 100644 --- a/src/librustc/query/mod.rs +++ b/src/librustc/query/mod.rs @@ -55,6 +55,11 @@ rustc_queries! { query native_libraries(_: CrateNum) -> Lrc<Vec<NativeLibrary>> { desc { "looking up the native libraries of a linked crate" } } + + query lint_levels(_: CrateNum) -> Lrc<lint::LintLevelMap> { + eval_always + desc { "computing the lint levels for items in this crate" } + } } Codegen { diff --git a/src/librustc/ty/query/config.rs b/src/librustc/ty/query/config.rs index 47ef09820b0..5cb5a0030f4 100644 --- a/src/librustc/ty/query/config.rs +++ b/src/librustc/ty/query/config.rs @@ -605,12 +605,6 @@ impl<'tcx> QueryDescription<'tcx> for queries::analysis<'tcx> { } } -impl<'tcx> QueryDescription<'tcx> for queries::lint_levels<'tcx> { - fn describe(_tcx: TyCtxt<'_, '_, '_>, _: CrateNum) -> Cow<'static, str> { - "computing the lint levels for items in this crate".into() - } -} - impl<'tcx> QueryDescription<'tcx> for queries::specializes<'tcx> { fn describe(_tcx: TyCtxt<'_, '_, '_>, _: (DefId, DefId)) -> Cow<'static, str> { "computing whether impls specialize one another".into() diff --git a/src/librustc/ty/query/mod.rs b/src/librustc/ty/query/mod.rs index 5eafb87592e..dbc81a4235d 100644 --- a/src/librustc/ty/query/mod.rs +++ b/src/librustc/ty/query/mod.rs @@ -415,7 +415,6 @@ rustc_query_append! { [define_queries!][ <'tcx> Other { [] fn module_exports: ModuleExports(DefId) -> Option<Lrc<Vec<Export>>>, - [] fn lint_levels: lint_levels_node(CrateNum) -> Lrc<lint::LintLevelMap>, }, TypeChecking { @@ -767,10 +766,6 @@ fn layout_dep_node<'tcx>(param_env: ty::ParamEnvAnd<'tcx, Ty<'tcx>>) -> DepConst DepConstructor::Layout { param_env } } -fn lint_levels_node<'tcx>(_: CrateNum) -> DepConstructor<'tcx> { - DepConstructor::LintLevels -} - fn specializes_node<'tcx>((a, b): (DefId, DefId)) -> DepConstructor<'tcx> { DepConstructor::Specializes { impl1: a, impl2: b } } diff --git a/src/librustc/ty/query/plumbing.rs b/src/librustc/ty/query/plumbing.rs index c364d15027d..adac19d3410 100644 --- a/src/librustc/ty/query/plumbing.rs +++ b/src/librustc/ty/query/plumbing.rs @@ -1332,7 +1332,6 @@ pub fn force_from_dep_node<'tcx>( DepKind::HasGlobalAllocator => { force!(has_global_allocator, krate!()); } DepKind::HasPanicHandler => { force!(has_panic_handler, krate!()); } DepKind::ExternCrate => { force!(extern_crate, def_id!()); } - DepKind::LintLevels => { force!(lint_levels, LOCAL_CRATE); } DepKind::InScopeTraits => { force!(in_scope_traits_map, def_id!().index); } DepKind::ModuleExports => { force!(module_exports, def_id!()); } DepKind::IsSanitizerRuntime => { force!(is_sanitizer_runtime, krate!()); } diff --git a/src/librustc_macros/src/query.rs b/src/librustc_macros/src/query.rs index fa5ab4737d8..0800579231f 100644 --- a/src/librustc_macros/src/query.rs +++ b/src/librustc_macros/src/query.rs @@ -51,6 +51,9 @@ enum QueryModifier { /// Generate a dep node based on the dependencies of the query Anon, + + // Always evaluate the query, ignoring its depdendencies + EvalAlways, } impl Parse for QueryModifier { @@ -104,6 +107,8 @@ impl Parse for QueryModifier { Ok(QueryModifier::NoForce) } else if modifier == "anon" { Ok(QueryModifier::Anon) + } else if modifier == "eval_always" { + Ok(QueryModifier::EvalAlways) } else { Err(Error::new(modifier.span(), "unknown query modifier")) } @@ -210,6 +215,9 @@ struct QueryModifiers { /// Generate a dep node based on the dependencies of the query anon: bool, + + // Always evaluate the query, ignoring its depdendencies + eval_always: bool, } /// Process query modifiers into a struct, erroring on duplicates @@ -221,6 +229,7 @@ fn process_modifiers(query: &mut Query) -> QueryModifiers { let mut no_hash = false; let mut no_force = false; let mut anon = false; + let mut eval_always = false; for modifier in query.modifiers.0.drain(..) { match modifier { QueryModifier::LoadCached(tcx, id, block) => { @@ -265,6 +274,12 @@ fn process_modifiers(query: &mut Query) -> QueryModifiers { } anon = true; } + QueryModifier::EvalAlways => { + if eval_always { + panic!("duplicate modifier `eval_always` for query `{}`", query.name); + } + eval_always = true; + } } } QueryModifiers { @@ -275,6 +290,7 @@ fn process_modifiers(query: &mut Query) -> QueryModifiers { no_hash, no_force, anon, + eval_always, } } @@ -403,6 +419,10 @@ pub fn rustc_queries(input: TokenStream) -> TokenStream { if modifiers.anon { attributes.push(quote! { anon }); }; + // Pass on the eval_always modifier + if modifiers.eval_always { + attributes.push(quote! { eval_always }); + }; let mut attribute_stream = quote! {}; for e in attributes.into_iter().intersperse(quote! {,}) { |
