Rollup merge of #131542 - lcnr:new-solver-fixmes, r=compiler-errors
next-solver: remove outdated FIXMEs r? `@compiler-errors`
This commit is contained in:
commit
b18e1aa612
@ -444,7 +444,6 @@ pub fn instantiate_canonical_state<D, I, T: TypeFoldable<I>>(
|
|||||||
for &arg in &state.value.var_values.var_values.as_slice()
|
for &arg in &state.value.var_values.var_values.as_slice()
|
||||||
[orig_values.len()..state.value.var_values.len()]
|
[orig_values.len()..state.value.var_values.len()]
|
||||||
{
|
{
|
||||||
// FIXME: This is so ugly.
|
|
||||||
let unconstrained = delegate.fresh_var_for_kind_with_span(arg, span);
|
let unconstrained = delegate.fresh_var_for_kind_with_span(arg, span);
|
||||||
orig_values.push(unconstrained);
|
orig_values.push(unconstrained);
|
||||||
}
|
}
|
||||||
|
@ -92,7 +92,6 @@ pub struct EvalCtxt<'a, D, I = <D as SolverDelegate>::Interner>
|
|||||||
#[derive_where(Clone, Debug, Default; I: Interner)]
|
#[derive_where(Clone, Debug, Default; I: Interner)]
|
||||||
#[derive(TypeVisitable_Generic, TypeFoldable_Generic, Lift_Generic)]
|
#[derive(TypeVisitable_Generic, TypeFoldable_Generic, Lift_Generic)]
|
||||||
#[cfg_attr(feature = "nightly", derive(TyDecodable, TyEncodable, HashStable_NoContext))]
|
#[cfg_attr(feature = "nightly", derive(TyDecodable, TyEncodable, HashStable_NoContext))]
|
||||||
// FIXME: This can be made crate-private once `EvalCtxt` also lives in this crate.
|
|
||||||
struct NestedGoals<I: Interner> {
|
struct NestedGoals<I: Interner> {
|
||||||
/// These normalizes-to goals are treated specially during the evaluation
|
/// These normalizes-to goals are treated specially during the evaluation
|
||||||
/// loop. In each iteration we take the RHS of the projection, replace it with
|
/// loop. In each iteration we take the RHS of the projection, replace it with
|
||||||
@ -421,6 +420,7 @@ pub(super) fn evaluate_goal_raw(
|
|||||||
let (normalization_nested_goals, certainty) =
|
let (normalization_nested_goals, certainty) =
|
||||||
self.instantiate_and_apply_query_response(goal.param_env, orig_values, response);
|
self.instantiate_and_apply_query_response(goal.param_env, orig_values, response);
|
||||||
self.inspect.goal_evaluation(goal_evaluation);
|
self.inspect.goal_evaluation(goal_evaluation);
|
||||||
|
|
||||||
// FIXME: We previously had an assert here that checked that recomputing
|
// FIXME: We previously had an assert here that checked that recomputing
|
||||||
// a goal after applying its constraints did not change its response.
|
// a goal after applying its constraints did not change its response.
|
||||||
//
|
//
|
||||||
|
@ -10,9 +10,6 @@
|
|||||||
//!
|
//!
|
||||||
//! For a high-level overview of how this solver works, check out the relevant
|
//! For a high-level overview of how this solver works, check out the relevant
|
||||||
//! section of the rustc-dev-guide.
|
//! section of the rustc-dev-guide.
|
||||||
//!
|
|
||||||
//! FIXME(@lcnr): Write that section. If you read this before then ask me
|
|
||||||
//! about it on zulip.
|
|
||||||
|
|
||||||
mod alias_relate;
|
mod alias_relate;
|
||||||
mod assembly;
|
mod assembly;
|
||||||
|
@ -899,7 +899,7 @@ fn consider_builtin_effects_intersection_candidate(
|
|||||||
for ty in types.iter() {
|
for ty in types.iter() {
|
||||||
// We can't find the intersection if the types used are generic.
|
// We can't find the intersection if the types used are generic.
|
||||||
//
|
//
|
||||||
// FIXME(effects) do we want to look at where clauses to get some
|
// FIXME(effects): do we want to look at where clauses to get some
|
||||||
// clue for the case where generic types are being used?
|
// clue for the case where generic types are being used?
|
||||||
let Some(kind) = ty::EffectKind::try_from_ty(cx, ty) else {
|
let Some(kind) = ty::EffectKind::try_from_ty(cx, ty) else {
|
||||||
return Err(NoSolution);
|
return Err(NoSolution);
|
||||||
|
@ -108,7 +108,6 @@ fn consider_error_guaranteed_candidate(
|
|||||||
ecx: &mut EvalCtxt<'_, D>,
|
ecx: &mut EvalCtxt<'_, D>,
|
||||||
_guar: I::ErrorGuaranteed,
|
_guar: I::ErrorGuaranteed,
|
||||||
) -> Result<Candidate<I>, NoSolution> {
|
) -> Result<Candidate<I>, NoSolution> {
|
||||||
// FIXME: don't need to enter a probe here.
|
|
||||||
ecx.probe_builtin_trait_candidate(BuiltinImplSource::Misc)
|
ecx.probe_builtin_trait_candidate(BuiltinImplSource::Misc)
|
||||||
.enter(|ecx| ecx.evaluate_added_goals_and_make_canonical_response(Certainty::Yes))
|
.enter(|ecx| ecx.evaluate_added_goals_and_make_canonical_response(Certainty::Yes))
|
||||||
}
|
}
|
||||||
@ -463,7 +462,6 @@ fn consider_builtin_future_candidate(
|
|||||||
// Async coroutine unconditionally implement `Future`
|
// Async coroutine unconditionally implement `Future`
|
||||||
// Technically, we need to check that the future output type is Sized,
|
// Technically, we need to check that the future output type is Sized,
|
||||||
// but that's already proven by the coroutine being WF.
|
// but that's already proven by the coroutine being WF.
|
||||||
// FIXME: use `consider_implied`
|
|
||||||
ecx.probe_builtin_trait_candidate(BuiltinImplSource::Misc)
|
ecx.probe_builtin_trait_candidate(BuiltinImplSource::Misc)
|
||||||
.enter(|ecx| ecx.evaluate_added_goals_and_make_canonical_response(Certainty::Yes))
|
.enter(|ecx| ecx.evaluate_added_goals_and_make_canonical_response(Certainty::Yes))
|
||||||
}
|
}
|
||||||
@ -489,7 +487,6 @@ fn consider_builtin_iterator_candidate(
|
|||||||
// Gen coroutines unconditionally implement `Iterator`
|
// Gen coroutines unconditionally implement `Iterator`
|
||||||
// Technically, we need to check that the iterator output type is Sized,
|
// Technically, we need to check that the iterator output type is Sized,
|
||||||
// but that's already proven by the coroutines being WF.
|
// but that's already proven by the coroutines being WF.
|
||||||
// FIXME: use `consider_implied`
|
|
||||||
ecx.probe_builtin_trait_candidate(BuiltinImplSource::Misc)
|
ecx.probe_builtin_trait_candidate(BuiltinImplSource::Misc)
|
||||||
.enter(|ecx| ecx.evaluate_added_goals_and_make_canonical_response(Certainty::Yes))
|
.enter(|ecx| ecx.evaluate_added_goals_and_make_canonical_response(Certainty::Yes))
|
||||||
}
|
}
|
||||||
@ -512,8 +509,7 @@ fn consider_builtin_fused_iterator_candidate(
|
|||||||
return Err(NoSolution);
|
return Err(NoSolution);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Gen coroutines unconditionally implement `FusedIterator`
|
// Gen coroutines unconditionally implement `FusedIterator`.
|
||||||
// FIXME: use `consider_implied`
|
|
||||||
ecx.probe_builtin_trait_candidate(BuiltinImplSource::Misc)
|
ecx.probe_builtin_trait_candidate(BuiltinImplSource::Misc)
|
||||||
.enter(|ecx| ecx.evaluate_added_goals_and_make_canonical_response(Certainty::Yes))
|
.enter(|ecx| ecx.evaluate_added_goals_and_make_canonical_response(Certainty::Yes))
|
||||||
}
|
}
|
||||||
@ -539,7 +535,6 @@ fn consider_builtin_async_iterator_candidate(
|
|||||||
// Gen coroutines unconditionally implement `Iterator`
|
// Gen coroutines unconditionally implement `Iterator`
|
||||||
// Technically, we need to check that the iterator output type is Sized,
|
// Technically, we need to check that the iterator output type is Sized,
|
||||||
// but that's already proven by the coroutines being WF.
|
// but that's already proven by the coroutines being WF.
|
||||||
// FIXME: use `consider_implied`
|
|
||||||
ecx.probe_builtin_trait_candidate(BuiltinImplSource::Misc)
|
ecx.probe_builtin_trait_candidate(BuiltinImplSource::Misc)
|
||||||
.enter(|ecx| ecx.evaluate_added_goals_and_make_canonical_response(Certainty::Yes))
|
.enter(|ecx| ecx.evaluate_added_goals_and_make_canonical_response(Certainty::Yes))
|
||||||
}
|
}
|
||||||
@ -610,7 +605,7 @@ fn consider_builtin_destruct_candidate(
|
|||||||
return Err(NoSolution);
|
return Err(NoSolution);
|
||||||
}
|
}
|
||||||
|
|
||||||
// FIXME(-Znext-solver): Implement this when we get const working in the new solver
|
// FIXME(effects): Implement this when we get const working in the new solver
|
||||||
|
|
||||||
// `Destruct` is automatically implemented for every type in
|
// `Destruct` is automatically implemented for every type in
|
||||||
// non-const environments.
|
// non-const environments.
|
||||||
@ -631,8 +626,6 @@ fn consider_builtin_transmute_candidate(
|
|||||||
return Err(NoSolution);
|
return Err(NoSolution);
|
||||||
}
|
}
|
||||||
|
|
||||||
// FIXME: This actually should destructure the `Result` we get from transmutability and
|
|
||||||
// register candidates. We probably need to register >1 since we may have an OR of ANDs.
|
|
||||||
ecx.probe_builtin_trait_candidate(BuiltinImplSource::Misc).enter(|ecx| {
|
ecx.probe_builtin_trait_candidate(BuiltinImplSource::Misc).enter(|ecx| {
|
||||||
let certainty = ecx.is_transmutable(
|
let certainty = ecx.is_transmutable(
|
||||||
goal.param_env,
|
goal.param_env,
|
||||||
|
@ -223,6 +223,8 @@ fn fetch_eligible_assoc_item(
|
|||||||
if eligible { Ok(Some(node_item.item.def_id)) } else { Ok(None) }
|
if eligible { Ok(Some(node_item.item.def_id)) } else { Ok(None) }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// FIXME: This actually should destructure the `Result` we get from transmutability and
|
||||||
|
// register candidates. We probably need to register >1 since we may have an OR of ANDs.
|
||||||
fn is_transmutable(
|
fn is_transmutable(
|
||||||
&self,
|
&self,
|
||||||
param_env: ty::ParamEnv<'tcx>,
|
param_env: ty::ParamEnv<'tcx>,
|
||||||
|
Loading…
Reference in New Issue
Block a user