1
Fork 0

Use DefineOpaqueTypes::Yes where the new solver is unconditionally used already

This commit is contained in:
Oli Scherer 2024-02-21 11:42:39 +00:00
parent 82ceed2add
commit 2247aaf276
3 changed files with 23 additions and 11 deletions

View file

@ -720,7 +720,8 @@ impl<'tcx> EvalCtxt<'_, 'tcx> {
) -> Result<(), NoSolution> { ) -> Result<(), NoSolution> {
self.infcx self.infcx
.at(&ObligationCause::dummy(), param_env) .at(&ObligationCause::dummy(), param_env)
.eq(DefineOpaqueTypes::No, lhs, rhs) // New solver ignores DefineOpaqueTypes, so choose Yes for consistency
.eq(DefineOpaqueTypes::Yes, lhs, rhs)
.map(|InferOk { value: (), obligations }| { .map(|InferOk { value: (), obligations }| {
self.add_goals(GoalSource::Misc, obligations.into_iter().map(|o| o.into())); self.add_goals(GoalSource::Misc, obligations.into_iter().map(|o| o.into()));
}) })
@ -759,7 +760,8 @@ impl<'tcx> EvalCtxt<'_, 'tcx> {
) -> Result<(), NoSolution> { ) -> Result<(), NoSolution> {
self.infcx self.infcx
.at(&ObligationCause::dummy(), param_env) .at(&ObligationCause::dummy(), param_env)
.sub(DefineOpaqueTypes::No, sub, sup) // New solver ignores DefineOpaqueTypes, so choose Yes for consistency
.sub(DefineOpaqueTypes::Yes, sub, sup)
.map(|InferOk { value: (), obligations }| { .map(|InferOk { value: (), obligations }| {
self.add_goals(GoalSource::Misc, obligations.into_iter().map(|o| o.into())); self.add_goals(GoalSource::Misc, obligations.into_iter().map(|o| o.into()));
}) })
@ -779,7 +781,8 @@ impl<'tcx> EvalCtxt<'_, 'tcx> {
) -> Result<(), NoSolution> { ) -> Result<(), NoSolution> {
self.infcx self.infcx
.at(&ObligationCause::dummy(), param_env) .at(&ObligationCause::dummy(), param_env)
.relate(DefineOpaqueTypes::No, lhs, variance, rhs) // New solver ignores DefineOpaqueTypes, so choose Yes for consistency
.relate(DefineOpaqueTypes::Yes, lhs, variance, rhs)
.map(|InferOk { value: (), obligations }| { .map(|InferOk { value: (), obligations }| {
self.add_goals(GoalSource::Misc, obligations.into_iter().map(|o| o.into())); self.add_goals(GoalSource::Misc, obligations.into_iter().map(|o| o.into()));
}) })
@ -803,7 +806,8 @@ impl<'tcx> EvalCtxt<'_, 'tcx> {
) -> Result<Vec<Goal<'tcx, ty::Predicate<'tcx>>>, NoSolution> { ) -> Result<Vec<Goal<'tcx, ty::Predicate<'tcx>>>, NoSolution> {
self.infcx self.infcx
.at(&ObligationCause::dummy(), param_env) .at(&ObligationCause::dummy(), param_env)
.eq(DefineOpaqueTypes::No, lhs, rhs) // New solver ignores DefineOpaqueTypes, so choose Yes for consistency
.eq(DefineOpaqueTypes::Yes, lhs, rhs)
.map(|InferOk { value: (), obligations }| { .map(|InferOk { value: (), obligations }| {
obligations.into_iter().map(|o| o.into()).collect() obligations.into_iter().map(|o| o.into()).collect()
}) })

View file

@ -182,7 +182,8 @@ fn rematch_impl<'tcx>(
let mut nested = infcx let mut nested = infcx
.at(&ObligationCause::dummy(), goal.param_env) .at(&ObligationCause::dummy(), goal.param_env)
.eq(DefineOpaqueTypes::No, goal.predicate.trait_ref, impl_trait_ref) // New solver ignores DefineOpaqueTypes, so choose Yes for consistency
.eq(DefineOpaqueTypes::Yes, goal.predicate.trait_ref, impl_trait_ref)
.map_err(|_| SelectionError::Unimplemented)? .map_err(|_| SelectionError::Unimplemented)?
.into_obligations(); .into_obligations();
@ -257,7 +258,8 @@ fn rematch_unsize<'tcx>(
nested.extend( nested.extend(
infcx infcx
.at(&ObligationCause::dummy(), goal.param_env) .at(&ObligationCause::dummy(), goal.param_env)
.eq(DefineOpaqueTypes::No, a_elem_ty, b_elem_ty) // New solver ignores DefineOpaqueTypes, so choose Yes for consistency
.eq(DefineOpaqueTypes::Yes, a_elem_ty, b_elem_ty)
.expect("expected rematch to succeed") .expect("expected rematch to succeed")
.into_obligations(), .into_obligations(),
); );
@ -300,7 +302,8 @@ fn rematch_unsize<'tcx>(
nested.extend( nested.extend(
infcx infcx
.at(&ObligationCause::dummy(), goal.param_env) .at(&ObligationCause::dummy(), goal.param_env)
.eq(DefineOpaqueTypes::No, unsized_a_ty, b_ty) // New solver ignores DefineOpaqueTypes, so choose Yes for consistency
.eq(DefineOpaqueTypes::Yes, unsized_a_ty, b_ty)
.expect("expected rematch to succeed") .expect("expected rematch to succeed")
.into_obligations(), .into_obligations(),
); );
@ -329,7 +332,8 @@ fn rematch_unsize<'tcx>(
nested.extend( nested.extend(
infcx infcx
.at(&ObligationCause::dummy(), goal.param_env) .at(&ObligationCause::dummy(), goal.param_env)
.eq(DefineOpaqueTypes::No, unsized_a_ty, b_ty) // New solver ignores DefineOpaqueTypes, so choose Yes for consistency
.eq(DefineOpaqueTypes::Yes, unsized_a_ty, b_ty)
.expect("expected rematch to succeed") .expect("expected rematch to succeed")
.into_obligations(), .into_obligations(),
); );

View file

@ -477,7 +477,8 @@ fn plug_infer_with_placeholders<'tcx>(
if ty.is_ty_var() { if ty.is_ty_var() {
let Ok(InferOk { value: (), obligations }) = let Ok(InferOk { value: (), obligations }) =
self.infcx.at(&ObligationCause::dummy(), ty::ParamEnv::empty()).eq( self.infcx.at(&ObligationCause::dummy(), ty::ParamEnv::empty()).eq(
DefineOpaqueTypes::No, // Comparing against a type variable never registers hidden types anyway
DefineOpaqueTypes::Yes,
ty, ty,
Ty::new_placeholder( Ty::new_placeholder(
self.infcx.tcx, self.infcx.tcx,
@ -504,7 +505,9 @@ fn plug_infer_with_placeholders<'tcx>(
if ct.is_ct_infer() { if ct.is_ct_infer() {
let Ok(InferOk { value: (), obligations }) = let Ok(InferOk { value: (), obligations }) =
self.infcx.at(&ObligationCause::dummy(), ty::ParamEnv::empty()).eq( self.infcx.at(&ObligationCause::dummy(), ty::ParamEnv::empty()).eq(
DefineOpaqueTypes::No, // The types of the constants are the same, so there is no hidden type
// registration happening anyway.
DefineOpaqueTypes::Yes,
ct, ct,
ty::Const::new_placeholder( ty::Const::new_placeholder(
self.infcx.tcx, self.infcx.tcx,
@ -532,7 +535,8 @@ fn plug_infer_with_placeholders<'tcx>(
if r.is_var() { if r.is_var() {
let Ok(InferOk { value: (), obligations }) = let Ok(InferOk { value: (), obligations }) =
self.infcx.at(&ObligationCause::dummy(), ty::ParamEnv::empty()).eq( self.infcx.at(&ObligationCause::dummy(), ty::ParamEnv::empty()).eq(
DefineOpaqueTypes::No, // Lifetimes don't contain opaque types (or any types for that matter).
DefineOpaqueTypes::Yes,
r, r,
ty::Region::new_placeholder( ty::Region::new_placeholder(
self.infcx.tcx, self.infcx.tcx,