diff --git a/compiler/rustc_trait_selection/src/traits/auto_trait.rs b/compiler/rustc_trait_selection/src/traits/auto_trait.rs
index 103f7c76a86d7..fac0414d7145b 100644
--- a/compiler/rustc_trait_selection/src/traits/auto_trait.rs
+++ b/compiler/rustc_trait_selection/src/traits/auto_trait.rs
@@ -9,7 +9,6 @@ use rustc_data_structures::unord::UnordSet;
use rustc_infer::infer::DefineOpaqueTypes;
use rustc_middle::ty::{Region, RegionVid};
use tracing::debug;
-use ty::TypingMode;
use super::*;
use crate::errors::UnableToConstructConstantValue;
@@ -71,7 +70,7 @@ impl<'tcx> AutoTraitFinder<'tcx> {
pub fn find_auto_trait_generics(
&self,
ty: Ty<'tcx>,
- orig_env: ty::ParamEnv<'tcx>,
+ typing_env: ty::TypingEnv<'tcx>,
trait_did: DefId,
mut auto_trait_callback: impl FnMut(AutoTraitInfo<'tcx>) -> A,
) -> AutoTraitResult {
@@ -79,7 +78,7 @@ impl<'tcx> AutoTraitFinder<'tcx> {
let trait_ref = ty::TraitRef::new(tcx, trait_did, [ty]);
- let infcx = tcx.infer_ctxt().build(TypingMode::non_body_analysis());
+ let (infcx, orig_env) = tcx.infer_ctxt().build_with_typing_env(typing_env);
let mut selcx = SelectionContext::new(&infcx);
for polarity in [ty::PredicatePolarity::Positive, ty::PredicatePolarity::Negative] {
let result = selcx.select(&Obligation::new(
@@ -89,17 +88,13 @@ impl<'tcx> AutoTraitFinder<'tcx> {
ty::TraitPredicate { trait_ref, polarity },
));
if let Ok(Some(ImplSource::UserDefined(_))) = result {
- debug!(
- "find_auto_trait_generics({:?}): \
- manual impl found, bailing out",
- trait_ref
- );
+ debug!("find_auto_trait_generics({trait_ref:?}): manual impl found, bailing out");
// If an explicit impl exists, it always takes priority over an auto impl
return AutoTraitResult::ExplicitImpl;
}
}
- let infcx = tcx.infer_ctxt().build(TypingMode::non_body_analysis());
+ let (infcx, orig_env) = tcx.infer_ctxt().build_with_typing_env(typing_env);
let mut fresh_preds = FxIndexSet::default();
// Due to the way projections are handled by SelectionContext, we need to run
diff --git a/src/librustdoc/clean/auto_trait.rs b/src/librustdoc/clean/auto_trait.rs
index 685fd922d914b..3fe567b1c3974 100644
--- a/src/librustdoc/clean/auto_trait.rs
+++ b/src/librustdoc/clean/auto_trait.rs
@@ -21,7 +21,7 @@ pub(crate) fn synthesize_auto_trait_impls<'tcx>(
item_def_id: DefId,
) -> Vec {
let tcx = cx.tcx;
- let param_env = tcx.param_env(item_def_id);
+ let typing_env = ty::TypingEnv::non_body_analysis(tcx, item_def_id);
let ty = tcx.type_of(item_def_id).instantiate_identity();
let finder = auto_trait::AutoTraitFinder::new(tcx);
@@ -34,7 +34,7 @@ pub(crate) fn synthesize_auto_trait_impls<'tcx>(
cx,
ty,
trait_def_id,
- param_env,
+ typing_env,
item_def_id,
&finder,
DiscardPositiveImpls::No,
@@ -42,13 +42,13 @@ pub(crate) fn synthesize_auto_trait_impls<'tcx>(
})
.collect();
// We are only interested in case the type *doesn't* implement the `Sized` trait.
- if !ty.is_sized(tcx, ty::TypingEnv::from_param_env(param_env))
+ if !ty.is_sized(tcx, typing_env)
&& let Some(sized_trait_def_id) = tcx.lang_items().sized_trait()
&& let Some(impl_item) = synthesize_auto_trait_impl(
cx,
ty,
sized_trait_def_id,
- param_env,
+ typing_env,
item_def_id,
&finder,
DiscardPositiveImpls::Yes,
@@ -64,7 +64,7 @@ fn synthesize_auto_trait_impl<'tcx>(
cx: &mut DocContext<'tcx>,
ty: Ty<'tcx>,
trait_def_id: DefId,
- param_env: ty::ParamEnv<'tcx>,
+ typing_env: ty::TypingEnv<'tcx>,
item_def_id: DefId,
finder: &auto_trait::AutoTraitFinder<'tcx>,
discard_positive_impls: DiscardPositiveImpls,
@@ -76,7 +76,7 @@ fn synthesize_auto_trait_impl<'tcx>(
return None;
}
- let result = finder.find_auto_trait_generics(ty, param_env, trait_def_id, |info| {
+ let result = finder.find_auto_trait_generics(ty, typing_env, trait_def_id, |info| {
clean_param_env(cx, item_def_id, info.full_user_env, info.region_data, info.vid_to_region)
});