No more TyCtxt::lazy_normalization
This commit is contained in:
parent
794249d768
commit
4fbb43e70f
6 changed files with 8 additions and 14 deletions
|
@ -50,7 +50,7 @@ pub(super) fn generics_of(tcx: TyCtxt<'_>, def_id: LocalDefId) -> ty::Generics {
|
||||||
// We do not allow generic parameters in anon consts if we are inside
|
// We do not allow generic parameters in anon consts if we are inside
|
||||||
// of a const parameter type, e.g. `struct Foo<const N: usize, const M: [u8; N]>` is not allowed.
|
// of a const parameter type, e.g. `struct Foo<const N: usize, const M: [u8; N]>` is not allowed.
|
||||||
None
|
None
|
||||||
} else if tcx.lazy_normalization() {
|
} else if tcx.features().generic_const_exprs {
|
||||||
let parent_node = tcx.hir().get_parent(hir_id);
|
let parent_node = tcx.hir().get_parent(hir_id);
|
||||||
if let Node::Variant(Variant { disr_expr: Some(constant), .. }) = parent_node
|
if let Node::Variant(Variant { disr_expr: Some(constant), .. }) = parent_node
|
||||||
&& constant.hir_id == hir_id
|
&& constant.hir_id == hir_id
|
||||||
|
|
|
@ -463,7 +463,7 @@ pub(super) fn explicit_predicates_of<'tcx>(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if matches!(def_kind, DefKind::AnonConst) && tcx.lazy_normalization() {
|
if matches!(def_kind, DefKind::AnonConst) && tcx.features().generic_const_exprs {
|
||||||
let hir_id = tcx.hir().local_def_id_to_hir_id(def_id);
|
let hir_id = tcx.hir().local_def_id_to_hir_id(def_id);
|
||||||
let parent_def_id = tcx.hir().get_parent_item(hir_id);
|
let parent_def_id = tcx.hir().get_parent_item(hir_id);
|
||||||
|
|
||||||
|
|
|
@ -20,7 +20,8 @@ pub fn provide(providers: &mut Providers) {
|
||||||
fn inferred_outlives_of(tcx: TyCtxt<'_>, item_def_id: LocalDefId) -> &[(ty::Clause<'_>, Span)] {
|
fn inferred_outlives_of(tcx: TyCtxt<'_>, item_def_id: LocalDefId) -> &[(ty::Clause<'_>, Span)] {
|
||||||
let id = tcx.hir().local_def_id_to_hir_id(item_def_id);
|
let id = tcx.hir().local_def_id_to_hir_id(item_def_id);
|
||||||
|
|
||||||
if matches!(tcx.def_kind(item_def_id), hir::def::DefKind::AnonConst) && tcx.lazy_normalization()
|
if matches!(tcx.def_kind(item_def_id), hir::def::DefKind::AnonConst)
|
||||||
|
&& tcx.features().generic_const_exprs
|
||||||
{
|
{
|
||||||
if tcx.hir().opt_const_param_default_param_def_id(id).is_some() {
|
if tcx.hir().opt_const_param_default_param_def_id(id).is_some() {
|
||||||
// In `generics_of` we set the generics' parent to be our parent's parent which means that
|
// In `generics_of` we set the generics' parent to be our parent's parent which means that
|
||||||
|
|
|
@ -227,7 +227,7 @@ impl<'tcx> InferCtxt<'tcx> {
|
||||||
return self.unify_const_variable(vid, a, relation.param_env());
|
return self.unify_const_variable(vid, a, relation.param_env());
|
||||||
}
|
}
|
||||||
(ty::ConstKind::Unevaluated(..), _) | (_, ty::ConstKind::Unevaluated(..))
|
(ty::ConstKind::Unevaluated(..), _) | (_, ty::ConstKind::Unevaluated(..))
|
||||||
if self.tcx.lazy_normalization() =>
|
if self.tcx.features().generic_const_exprs =>
|
||||||
{
|
{
|
||||||
relation.register_const_equate_obligation(a, b);
|
relation.register_const_equate_obligation(a, b);
|
||||||
return Ok(b);
|
return Ok(b);
|
||||||
|
|
|
@ -1015,15 +1015,6 @@ impl<'tcx> TyCtxt<'tcx> {
|
||||||
self.query_system.on_disk_cache.as_ref().map_or(Ok(0), |c| c.serialize(self, encoder))
|
self.query_system.on_disk_cache.as_ref().map_or(Ok(0), |c| c.serialize(self, encoder))
|
||||||
}
|
}
|
||||||
|
|
||||||
/// If `true`, we should use lazy normalization for constants, otherwise
|
|
||||||
/// we still evaluate them eagerly.
|
|
||||||
#[inline]
|
|
||||||
pub fn lazy_normalization(self) -> bool {
|
|
||||||
let features = self.features();
|
|
||||||
// Note: We only use lazy normalization for generic const expressions.
|
|
||||||
features.generic_const_exprs
|
|
||||||
}
|
|
||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
pub fn local_crate_exports_generics(self) -> bool {
|
pub fn local_crate_exports_generics(self) -> bool {
|
||||||
debug_assert!(self.sess.opts.share_generics());
|
debug_assert!(self.sess.opts.share_generics());
|
||||||
|
|
|
@ -672,7 +672,9 @@ impl<'a, 'b, 'tcx> TypeFolder<TyCtxt<'tcx>> for AssocTypeNormalizer<'a, 'b, 'tcx
|
||||||
#[instrument(skip(self), level = "debug")]
|
#[instrument(skip(self), level = "debug")]
|
||||||
fn fold_const(&mut self, constant: ty::Const<'tcx>) -> ty::Const<'tcx> {
|
fn fold_const(&mut self, constant: ty::Const<'tcx>) -> ty::Const<'tcx> {
|
||||||
let tcx = self.selcx.tcx();
|
let tcx = self.selcx.tcx();
|
||||||
if tcx.lazy_normalization() || !needs_normalization(&constant, self.param_env.reveal()) {
|
if tcx.features().generic_const_exprs
|
||||||
|
|| !needs_normalization(&constant, self.param_env.reveal())
|
||||||
|
{
|
||||||
constant
|
constant
|
||||||
} else {
|
} else {
|
||||||
let constant = constant.super_fold_with(self);
|
let constant = constant.super_fold_with(self);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue