1
Fork 0

Remove remap_env_constness in queries

This commit is contained in:
Deadbeef 2023-03-27 14:39:32 +00:00
parent 131211acd2
commit 954d9a8f8e
8 changed files with 25 additions and 69 deletions

View file

@ -112,9 +112,6 @@ struct QueryModifiers {
/// Use a separate query provider for local and extern crates /// Use a separate query provider for local and extern crates
separate_provide_extern: Option<Ident>, separate_provide_extern: Option<Ident>,
/// Always remap the ParamEnv's constness before hashing.
remap_env_constness: Option<Ident>,
/// Generate a `feed` method to set the query's value from another query. /// Generate a `feed` method to set the query's value from another query.
feedable: Option<Ident>, feedable: Option<Ident>,
} }
@ -130,7 +127,6 @@ fn parse_query_modifiers(input: ParseStream<'_>) -> Result<QueryModifiers> {
let mut eval_always = None; let mut eval_always = None;
let mut depth_limit = None; let mut depth_limit = None;
let mut separate_provide_extern = None; let mut separate_provide_extern = None;
let mut remap_env_constness = None;
let mut feedable = None; let mut feedable = None;
while !input.is_empty() { while !input.is_empty() {
@ -189,8 +185,6 @@ fn parse_query_modifiers(input: ParseStream<'_>) -> Result<QueryModifiers> {
try_insert!(depth_limit = modifier); try_insert!(depth_limit = modifier);
} else if modifier == "separate_provide_extern" { } else if modifier == "separate_provide_extern" {
try_insert!(separate_provide_extern = modifier); try_insert!(separate_provide_extern = modifier);
} else if modifier == "remap_env_constness" {
try_insert!(remap_env_constness = modifier);
} else if modifier == "feedable" { } else if modifier == "feedable" {
try_insert!(feedable = modifier); try_insert!(feedable = modifier);
} else { } else {
@ -211,7 +205,6 @@ fn parse_query_modifiers(input: ParseStream<'_>) -> Result<QueryModifiers> {
eval_always, eval_always,
depth_limit, depth_limit,
separate_provide_extern, separate_provide_extern,
remap_env_constness,
feedable, feedable,
}) })
} }
@ -332,7 +325,6 @@ pub fn rustc_queries(input: TokenStream) -> TokenStream {
eval_always, eval_always,
depth_limit, depth_limit,
separate_provide_extern, separate_provide_extern,
remap_env_constness,
); );
if modifiers.cache.is_some() { if modifiers.cache.is_some() {

View file

@ -336,14 +336,6 @@ impl<'tcx, R> Canonical<'tcx, QueryResponse<'tcx, R>> {
} }
} }
impl<'tcx, R> Canonical<'tcx, ty::ParamEnvAnd<'tcx, R>> {
#[inline]
pub fn without_const(mut self) -> Self {
self.value = self.value.without_const();
self
}
}
impl<'tcx, V> Canonical<'tcx, V> { impl<'tcx, V> Canonical<'tcx, V> {
/// Allows you to map the `value` of a canonical while keeping the /// Allows you to map the `value` of a canonical while keeping the
/// same set of bound variables. /// same set of bound variables.

View file

@ -1088,7 +1088,6 @@ rustc_queries! {
key: ty::ParamEnvAnd<'tcx, mir::ConstantKind<'tcx>> key: ty::ParamEnvAnd<'tcx, mir::ConstantKind<'tcx>>
) -> Option<mir::DestructuredConstant<'tcx>> { ) -> Option<mir::DestructuredConstant<'tcx>> {
desc { "destructuring MIR constant"} desc { "destructuring MIR constant"}
remap_env_constness
} }
/// Dereference a constant reference or raw pointer and turn the result into a constant /// Dereference a constant reference or raw pointer and turn the result into a constant
@ -1097,7 +1096,6 @@ rustc_queries! {
key: ty::ParamEnvAnd<'tcx, mir::ConstantKind<'tcx>> key: ty::ParamEnvAnd<'tcx, mir::ConstantKind<'tcx>>
) -> mir::ConstantKind<'tcx> { ) -> mir::ConstantKind<'tcx> {
desc { "dereferencing MIR constant" } desc { "dereferencing MIR constant" }
remap_env_constness
} }
query const_caller_location(key: (rustc_span::Symbol, u32, u32)) -> ConstValue<'tcx> { query const_caller_location(key: (rustc_span::Symbol, u32, u32)) -> ConstValue<'tcx> {
@ -1340,32 +1338,26 @@ rustc_queries! {
/// `ty.is_copy()`, etc, since that will prune the environment where possible. /// `ty.is_copy()`, etc, since that will prune the environment where possible.
query is_copy_raw(env: ty::ParamEnvAnd<'tcx, Ty<'tcx>>) -> bool { query is_copy_raw(env: ty::ParamEnvAnd<'tcx, Ty<'tcx>>) -> bool {
desc { "computing whether `{}` is `Copy`", env.value } desc { "computing whether `{}` is `Copy`", env.value }
remap_env_constness
} }
/// Query backing `Ty::is_sized`. /// Query backing `Ty::is_sized`.
query is_sized_raw(env: ty::ParamEnvAnd<'tcx, Ty<'tcx>>) -> bool { query is_sized_raw(env: ty::ParamEnvAnd<'tcx, Ty<'tcx>>) -> bool {
desc { "computing whether `{}` is `Sized`", env.value } desc { "computing whether `{}` is `Sized`", env.value }
remap_env_constness
} }
/// Query backing `Ty::is_freeze`. /// Query backing `Ty::is_freeze`.
query is_freeze_raw(env: ty::ParamEnvAnd<'tcx, Ty<'tcx>>) -> bool { query is_freeze_raw(env: ty::ParamEnvAnd<'tcx, Ty<'tcx>>) -> bool {
desc { "computing whether `{}` is freeze", env.value } desc { "computing whether `{}` is freeze", env.value }
remap_env_constness
} }
/// Query backing `Ty::is_unpin`. /// Query backing `Ty::is_unpin`.
query is_unpin_raw(env: ty::ParamEnvAnd<'tcx, Ty<'tcx>>) -> bool { query is_unpin_raw(env: ty::ParamEnvAnd<'tcx, Ty<'tcx>>) -> bool {
desc { "computing whether `{}` is `Unpin`", env.value } desc { "computing whether `{}` is `Unpin`", env.value }
remap_env_constness
} }
/// Query backing `Ty::needs_drop`. /// Query backing `Ty::needs_drop`.
query needs_drop_raw(env: ty::ParamEnvAnd<'tcx, Ty<'tcx>>) -> bool { query needs_drop_raw(env: ty::ParamEnvAnd<'tcx, Ty<'tcx>>) -> bool {
desc { "computing whether `{}` needs drop", env.value } desc { "computing whether `{}` needs drop", env.value }
remap_env_constness
} }
/// Query backing `Ty::has_significant_drop_raw`. /// Query backing `Ty::has_significant_drop_raw`.
query has_significant_drop_raw(env: ty::ParamEnvAnd<'tcx, Ty<'tcx>>) -> bool { query has_significant_drop_raw(env: ty::ParamEnvAnd<'tcx, Ty<'tcx>>) -> bool {
desc { "computing whether `{}` has a significant drop", env.value } desc { "computing whether `{}` has a significant drop", env.value }
remap_env_constness
} }
/// Query backing `Ty::is_structural_eq_shallow`. /// Query backing `Ty::is_structural_eq_shallow`.
@ -1405,7 +1397,6 @@ rustc_queries! {
) -> Result<ty::layout::TyAndLayout<'tcx>, ty::layout::LayoutError<'tcx>> { ) -> Result<ty::layout::TyAndLayout<'tcx>, ty::layout::LayoutError<'tcx>> {
depth_limit depth_limit
desc { "computing layout of `{}`", key.value } desc { "computing layout of `{}`", key.value }
remap_env_constness
} }
/// Compute a `FnAbi` suitable for indirect calls, i.e. to `fn` pointers. /// Compute a `FnAbi` suitable for indirect calls, i.e. to `fn` pointers.
@ -1416,7 +1407,6 @@ rustc_queries! {
key: ty::ParamEnvAnd<'tcx, (ty::PolyFnSig<'tcx>, &'tcx ty::List<Ty<'tcx>>)> key: ty::ParamEnvAnd<'tcx, (ty::PolyFnSig<'tcx>, &'tcx ty::List<Ty<'tcx>>)>
) -> Result<&'tcx abi::call::FnAbi<'tcx, Ty<'tcx>>, ty::layout::FnAbiError<'tcx>> { ) -> Result<&'tcx abi::call::FnAbi<'tcx, Ty<'tcx>>, ty::layout::FnAbiError<'tcx>> {
desc { "computing call ABI of `{}` function pointers", key.value.0 } desc { "computing call ABI of `{}` function pointers", key.value.0 }
remap_env_constness
} }
/// Compute a `FnAbi` suitable for declaring/defining an `fn` instance, and for /// Compute a `FnAbi` suitable for declaring/defining an `fn` instance, and for
@ -1428,7 +1418,6 @@ rustc_queries! {
key: ty::ParamEnvAnd<'tcx, (ty::Instance<'tcx>, &'tcx ty::List<Ty<'tcx>>)> key: ty::ParamEnvAnd<'tcx, (ty::Instance<'tcx>, &'tcx ty::List<Ty<'tcx>>)>
) -> Result<&'tcx abi::call::FnAbi<'tcx, Ty<'tcx>>, ty::layout::FnAbiError<'tcx>> { ) -> Result<&'tcx abi::call::FnAbi<'tcx, Ty<'tcx>>, ty::layout::FnAbiError<'tcx>> {
desc { "computing call ABI of `{}`", key.value.0 } desc { "computing call ABI of `{}`", key.value.0 }
remap_env_constness
} }
query dylib_dependency_formats(_: CrateNum) query dylib_dependency_formats(_: CrateNum)
@ -1935,7 +1924,6 @@ rustc_queries! {
NoSolution, NoSolution,
> { > {
desc { "normalizing `{}`", goal.value.value } desc { "normalizing `{}`", goal.value.value }
remap_env_constness
} }
/// Do not call this query directly: invoke `try_normalize_erasing_regions` instead. /// Do not call this query directly: invoke `try_normalize_erasing_regions` instead.
@ -1943,7 +1931,6 @@ rustc_queries! {
goal: ParamEnvAnd<'tcx, GenericArg<'tcx>> goal: ParamEnvAnd<'tcx, GenericArg<'tcx>>
) -> Result<GenericArg<'tcx>, NoSolution> { ) -> Result<GenericArg<'tcx>, NoSolution> {
desc { "normalizing `{}`", goal.value } desc { "normalizing `{}`", goal.value }
remap_env_constness
} }
query implied_outlives_bounds( query implied_outlives_bounds(
@ -1953,7 +1940,6 @@ rustc_queries! {
NoSolution, NoSolution,
> { > {
desc { "computing implied outlives bounds for `{}`", goal.value.value } desc { "computing implied outlives bounds for `{}`", goal.value.value }
remap_env_constness
} }
/// Do not call this query directly: /// Do not call this query directly:
@ -1965,7 +1951,6 @@ rustc_queries! {
NoSolution, NoSolution,
> { > {
desc { "computing dropck types for `{}`", goal.value.value } desc { "computing dropck types for `{}`", goal.value.value }
remap_env_constness
} }
/// Do not call this query directly: invoke `infcx.predicate_may_hold()` or /// Do not call this query directly: invoke `infcx.predicate_may_hold()` or
@ -1993,7 +1978,6 @@ rustc_queries! {
NoSolution, NoSolution,
> { > {
desc { "evaluating `type_op_ascribe_user_type` `{:?}`", goal.value.value } desc { "evaluating `type_op_ascribe_user_type` `{:?}`", goal.value.value }
remap_env_constness
} }
/// Do not call this query directly: part of the `Eq` type-op /// Do not call this query directly: part of the `Eq` type-op
@ -2004,7 +1988,6 @@ rustc_queries! {
NoSolution, NoSolution,
> { > {
desc { "evaluating `type_op_eq` `{:?}`", goal.value.value } desc { "evaluating `type_op_eq` `{:?}`", goal.value.value }
remap_env_constness
} }
/// Do not call this query directly: part of the `Subtype` type-op /// Do not call this query directly: part of the `Subtype` type-op
@ -2015,7 +1998,6 @@ rustc_queries! {
NoSolution, NoSolution,
> { > {
desc { "evaluating `type_op_subtype` `{:?}`", goal.value.value } desc { "evaluating `type_op_subtype` `{:?}`", goal.value.value }
remap_env_constness
} }
/// Do not call this query directly: part of the `ProvePredicate` type-op /// Do not call this query directly: part of the `ProvePredicate` type-op
@ -2036,7 +2018,6 @@ rustc_queries! {
NoSolution, NoSolution,
> { > {
desc { "normalizing `{}`", goal.value.value.value } desc { "normalizing `{}`", goal.value.value.value }
remap_env_constness
} }
/// Do not call this query directly: part of the `Normalize` type-op /// Do not call this query directly: part of the `Normalize` type-op
@ -2047,7 +2028,6 @@ rustc_queries! {
NoSolution, NoSolution,
> { > {
desc { "normalizing `{:?}`", goal.value.value.value } desc { "normalizing `{:?}`", goal.value.value.value }
remap_env_constness
} }
/// Do not call this query directly: part of the `Normalize` type-op /// Do not call this query directly: part of the `Normalize` type-op
@ -2058,7 +2038,6 @@ rustc_queries! {
NoSolution, NoSolution,
> { > {
desc { "normalizing `{:?}`", goal.value.value.value } desc { "normalizing `{:?}`", goal.value.value.value }
remap_env_constness
} }
/// Do not call this query directly: part of the `Normalize` type-op /// Do not call this query directly: part of the `Normalize` type-op
@ -2069,7 +2048,6 @@ rustc_queries! {
NoSolution, NoSolution,
> { > {
desc { "normalizing `{:?}`", goal.value.value.value } desc { "normalizing `{:?}`", goal.value.value.value }
remap_env_constness
} }
query subst_and_check_impossible_predicates(key: (DefId, SubstsRef<'tcx>)) -> bool { query subst_and_check_impossible_predicates(key: (DefId, SubstsRef<'tcx>)) -> bool {
@ -2091,7 +2069,6 @@ rustc_queries! {
goal: CanonicalTyGoal<'tcx> goal: CanonicalTyGoal<'tcx>
) -> MethodAutoderefStepsResult<'tcx> { ) -> MethodAutoderefStepsResult<'tcx> {
desc { "computing autoderef types for `{}`", goal.value.value } desc { "computing autoderef types for `{}`", goal.value.value }
remap_env_constness
} }
query supported_target_features(_: CrateNum) -> &'tcx FxHashMap<String, Option<Symbol>> { query supported_target_features(_: CrateNum) -> &'tcx FxHashMap<String, Option<Symbol>> {
@ -2136,7 +2113,6 @@ rustc_queries! {
key: ty::ParamEnvAnd<'tcx, (DefId, SubstsRef<'tcx>)> key: ty::ParamEnvAnd<'tcx, (DefId, SubstsRef<'tcx>)>
) -> Result<Option<ty::Instance<'tcx>>, ErrorGuaranteed> { ) -> Result<Option<ty::Instance<'tcx>>, ErrorGuaranteed> {
desc { "resolving instance `{}`", ty::Instance::new(key.value.0, key.value.1) } desc { "resolving instance `{}`", ty::Instance::new(key.value.0, key.value.1) }
remap_env_constness
} }
query resolve_instance_of_const_arg( query resolve_instance_of_const_arg(
@ -2146,7 +2122,6 @@ rustc_queries! {
"resolving instance of the const argument `{}`", "resolving instance of the const argument `{}`",
ty::Instance::new(key.value.0.to_def_id(), key.value.2), ty::Instance::new(key.value.0.to_def_id(), key.value.2),
} }
remap_env_constness
} }
query reveal_opaque_types_in_bounds(key: &'tcx ty::List<ty::Predicate<'tcx>>) -> &'tcx ty::List<ty::Predicate<'tcx>> { query reveal_opaque_types_in_bounds(key: &'tcx ty::List<ty::Predicate<'tcx>>) -> &'tcx ty::List<ty::Predicate<'tcx>> {

View file

@ -1849,12 +1849,6 @@ impl<'tcx, T> ParamEnvAnd<'tcx, T> {
pub fn into_parts(self) -> (ParamEnv<'tcx>, T) { pub fn into_parts(self) -> (ParamEnv<'tcx>, T) {
(self.param_env, self.value) (self.param_env, self.value)
} }
#[inline]
pub fn without_const(mut self) -> Self {
self.param_env = self.param_env.without_const();
self
}
} }
#[derive(Copy, Clone, Debug, HashStable, Encodable, Decodable)] #[derive(Copy, Clone, Debug, HashStable, Encodable, Decodable)]

View file

@ -202,16 +202,6 @@ macro_rules! separate_provide_extern_default {
}; };
} }
macro_rules! opt_remap_env_constness {
([][$name:ident]) => {};
([(remap_env_constness) $($rest:tt)*][$name:ident]) => {
let $name = $name.without_const();
};
([$other:tt $($modifiers:tt)*][$name:ident]) => {
opt_remap_env_constness!([$($modifiers)*][$name])
};
}
macro_rules! define_callbacks { macro_rules! define_callbacks {
( (
$($(#[$attr:meta])* $($(#[$attr:meta])*
@ -353,7 +343,6 @@ macro_rules! define_callbacks {
#[inline(always)] #[inline(always)]
pub fn $name(self, key: query_helper_param_ty!($($K)*)) { pub fn $name(self, key: query_helper_param_ty!($($K)*)) {
let key = key.into_query_param(); let key = key.into_query_param();
opt_remap_env_constness!([$($modifiers)*][key]);
match try_get_cached(self.tcx, &self.tcx.query_system.caches.$name, &key) { match try_get_cached(self.tcx, &self.tcx.query_system.caches.$name, &key) {
Some(_) => return, Some(_) => return,
@ -372,7 +361,6 @@ macro_rules! define_callbacks {
#[inline(always)] #[inline(always)]
pub fn $name(self, key: query_helper_param_ty!($($K)*)) { pub fn $name(self, key: query_helper_param_ty!($($K)*)) {
let key = key.into_query_param(); let key = key.into_query_param();
opt_remap_env_constness!([$($modifiers)*][key]);
match try_get_cached(self.tcx, &self.tcx.query_system.caches.$name, &key) { match try_get_cached(self.tcx, &self.tcx.query_system.caches.$name, &key) {
Some(_) => return, Some(_) => return,
@ -402,7 +390,6 @@ macro_rules! define_callbacks {
pub fn $name(self, key: query_helper_param_ty!($($K)*)) -> $V pub fn $name(self, key: query_helper_param_ty!($($K)*)) -> $V
{ {
let key = key.into_query_param(); let key = key.into_query_param();
opt_remap_env_constness!([$($modifiers)*][key]);
restore::<$V>(match try_get_cached(self.tcx, &self.tcx.query_system.caches.$name, &key) { restore::<$V>(match try_get_cached(self.tcx, &self.tcx.query_system.caches.$name, &key) {
Some(value) => value, Some(value) => value,
@ -492,7 +479,6 @@ macro_rules! define_feedable {
#[inline(always)] #[inline(always)]
pub fn $name(self, value: query_provided::$name<'tcx>) -> $V { pub fn $name(self, value: query_provided::$name<'tcx>) -> $V {
let key = self.key().into_query_param(); let key = self.key().into_query_param();
opt_remap_env_constness!([$($modifiers)*][key]);
let tcx = self.tcx; let tcx = self.tcx;
let erased = query_provided_to_value::$name(tcx, value); let erased = query_provided_to_value::$name(tcx, value);

View file

@ -32,14 +32,8 @@ impl<'tcx> super::QueryTypeOp<'tcx> for ProvePredicate<'tcx> {
fn perform_query( fn perform_query(
tcx: TyCtxt<'tcx>, tcx: TyCtxt<'tcx>,
mut canonicalized: Canonical<'tcx, ParamEnvAnd<'tcx, Self>>, canonicalized: Canonical<'tcx, ParamEnvAnd<'tcx, Self>>,
) -> Fallible<CanonicalQueryResponse<'tcx, ()>> { ) -> Fallible<CanonicalQueryResponse<'tcx, ()>> {
match canonicalized.value.value.predicate.kind().skip_binder() {
ty::PredicateKind::Clause(ty::Clause::Trait(pred)) => {
canonicalized.value.param_env.remap_constness_with(pred.constness);
}
_ => canonicalized.value.param_env = canonicalized.value.param_env.without_const(),
}
tcx.type_op_prove_predicate(canonicalized) tcx.type_op_prove_predicate(canonicalized)
} }
} }

View file

@ -1,4 +1,10 @@
// check-pass // known-bug: #88119
// failure-status: 101
// normalize-stderr-test "note: .*\n" -> ""
// normalize-stderr-test "thread 'rustc' panicked.*\n" -> ""
// normalize-stderr-test "\s\d{1,}: .*\n" -> ""
// normalize-stderr-test "\s at .*\n" -> ""
// rustc-env:RUST_BACKTRACE=0
#![allow(incomplete_features)] #![allow(incomplete_features)]
#![feature(const_trait_impl, generic_const_exprs)] #![feature(const_trait_impl, generic_const_exprs)]

File diff suppressed because one or more lines are too long