Use DefineOpaqueTypes::Yes
where the new solver is unconditionally used already
This commit is contained in:
parent
82ceed2add
commit
2247aaf276
3 changed files with 23 additions and 11 deletions
|
@ -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()
|
||||||
})
|
})
|
||||||
|
|
|
@ -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(),
|
||||||
);
|
);
|
||||||
|
|
|
@ -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,
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue