Rename the FIXMEs, remove a few that dont matter anymore
This commit is contained in:
parent
0b5ddf30eb
commit
6b96103bf3
47 changed files with 58 additions and 68 deletions
|
@ -594,8 +594,8 @@ pub(crate) struct ConstBoundTraitObject {
|
|||
pub span: Span,
|
||||
}
|
||||
|
||||
// FIXME(effects): Consider making the note/reason the message of the diagnostic.
|
||||
// FIXME(effects): Provide structured suggestions (e.g., add `const` / `#[const_trait]` here).
|
||||
// FIXME(const_trait_impl): Consider making the note/reason the message of the diagnostic.
|
||||
// FIXME(const_trait_impl): Provide structured suggestions (e.g., add `const` / `#[const_trait]` here).
|
||||
#[derive(Diagnostic)]
|
||||
#[diag(ast_passes_tilde_const_disallowed)]
|
||||
pub(crate) struct TildeConstDisallowed {
|
||||
|
|
|
@ -657,7 +657,8 @@ impl<'tcx> Visitor<'tcx> for Checker<'_, 'tcx> {
|
|||
// typeck ensures the conditions for calling a const trait method are met,
|
||||
// so we only error if the trait isn't const. We try to resolve the trait
|
||||
// into the concrete method, and uses that for const stability checks.
|
||||
// FIXME(effects) we might consider moving const stability checks to typeck as well.
|
||||
// FIXME(const_trait_impl) we might consider moving const stability checks
|
||||
// to typeck as well.
|
||||
if tcx.features().const_trait_impl() && trait_is_const {
|
||||
// This skips the check below that ensures we only call `const fn`.
|
||||
is_trait = true;
|
||||
|
|
|
@ -120,7 +120,7 @@ impl<'tcx> NonConstOp<'tcx> for FnCallNonConst<'tcx> {
|
|||
let implsrc = selcx.select(&obligation);
|
||||
|
||||
if let Ok(Some(ImplSource::UserDefined(data))) = implsrc {
|
||||
// FIXME(effects) revisit this
|
||||
// FIXME(const_trait_impl) revisit this
|
||||
if !tcx.is_const_trait_impl(data.impl_def_id) {
|
||||
let span = tcx.def_span(data.impl_def_id);
|
||||
err.subdiagnostic(errors::NonConstImplNote { span });
|
||||
|
|
|
@ -192,7 +192,7 @@ impl Qualif for NeedsNonConstDrop {
|
|||
return false;
|
||||
}
|
||||
|
||||
// FIXME(effects): Reimplement const drop checking.
|
||||
// FIXME(const_trait_impl): Reimplement const drop checking.
|
||||
NeedsDrop::in_any_value_of_ty(cx, ty)
|
||||
}
|
||||
|
||||
|
|
|
@ -431,7 +431,7 @@ impl<'tcx> interpret::Machine<'tcx> for CompileTimeMachine<'tcx> {
|
|||
// sensitive check here. But we can at least rule out functions that are not const at
|
||||
// all. That said, we have to allow calling functions inside a trait marked with
|
||||
// #[const_trait]. These *are* const-checked!
|
||||
// FIXME(effects): why does `is_const_fn` not classify them as const?
|
||||
// FIXME(const_trait_impl): why does `is_const_fn` not classify them as const?
|
||||
if (!ecx.tcx.is_const_fn(def) && !ecx.tcx.is_const_default_method(def))
|
||||
|| ecx.tcx.has_attr(def, sym::rustc_do_not_const_check)
|
||||
{
|
||||
|
|
|
@ -205,7 +205,6 @@ fn compare_method_predicate_entailment<'tcx>(
|
|||
trait_m_predicates.instantiate_own(tcx, trait_to_impl_args).map(|(predicate, _)| predicate),
|
||||
);
|
||||
|
||||
// FIXME(effects): This should be replaced with a more dedicated method.
|
||||
let is_conditionally_const = tcx.is_conditionally_const(impl_def_id);
|
||||
if is_conditionally_const {
|
||||
// Augment the hybrid param-env with the const conditions
|
||||
|
|
|
@ -563,7 +563,6 @@ impl<'tcx> dyn HirTyLowerer<'tcx> + '_ {
|
|||
if let Err(guar) = ty.error_reported() {
|
||||
return ty::Const::new_error(tcx, guar).into();
|
||||
}
|
||||
// FIXME(effects) see if we should special case effect params here
|
||||
if !infer_args && has_default {
|
||||
tcx.const_param_default(param.def_id)
|
||||
.instantiate(tcx, preceding_args)
|
||||
|
|
|
@ -459,7 +459,7 @@ fn trait_predicates_eq<'tcx>(
|
|||
predicate1: ty::Predicate<'tcx>,
|
||||
predicate2: ty::Predicate<'tcx>,
|
||||
) -> bool {
|
||||
// FIXME(effects)
|
||||
// FIXME(const_trait_impl)
|
||||
predicate1 == predicate2
|
||||
}
|
||||
|
||||
|
|
|
@ -461,7 +461,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
|
|||
}
|
||||
(fn_sig, Some(def_id))
|
||||
}
|
||||
// FIXME(effects): these arms should error because we can't enforce them
|
||||
// FIXME(const_trait_impl): these arms should error because we can't enforce them
|
||||
ty::FnPtr(sig_tys, hdr) => (sig_tys.with(hdr), None),
|
||||
_ => {
|
||||
for arg in arg_exprs {
|
||||
|
@ -843,7 +843,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
|
|||
callee_did: DefId,
|
||||
callee_args: GenericArgsRef<'tcx>,
|
||||
) {
|
||||
// FIXME(effects): We should be enforcing these effects unconditionally.
|
||||
// FIXME(const_trait_impl): We should be enforcing these effects unconditionally.
|
||||
// This can be done as soon as we convert the standard library back to
|
||||
// using const traits, since if we were to enforce these conditions now,
|
||||
// we'd fail on basically every builtin trait call (i.e. `1 + 2`).
|
||||
|
@ -864,11 +864,11 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
|
|||
None => return,
|
||||
};
|
||||
|
||||
// FIXME(effects): Should this be `is_const_fn_raw`? It depends on if we move
|
||||
// FIXME(const_trait_impl): Should this be `is_const_fn_raw`? It depends on if we move
|
||||
// const stability checking here too, I guess.
|
||||
if self.tcx.is_conditionally_const(callee_did) {
|
||||
let q = self.tcx.const_conditions(callee_did);
|
||||
// FIXME(effects): Use this span with a better cause code.
|
||||
// FIXME(const_trait_impl): Use this span with a better cause code.
|
||||
for (cond, _) in q.instantiate(self.tcx, callee_args) {
|
||||
self.register_predicate(Obligation::new(
|
||||
self.tcx,
|
||||
|
@ -878,7 +878,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
|
|||
));
|
||||
}
|
||||
} else {
|
||||
// FIXME(effects): This should eventually be caught here.
|
||||
// FIXME(const_trait_impl): This should eventually be caught here.
|
||||
// For now, though, we defer some const checking to MIR.
|
||||
}
|
||||
}
|
||||
|
|
|
@ -3125,7 +3125,6 @@ impl<'tcx> TyCtxt<'tcx> {
|
|||
}
|
||||
}
|
||||
|
||||
// FIXME(effects): Please remove this. It's a footgun.
|
||||
/// Whether the trait impl is marked const. This does not consider stability or feature gates.
|
||||
pub fn is_const_trait_impl(self, def_id: DefId) -> bool {
|
||||
self.def_kind(def_id) == DefKind::Impl { of_trait: true }
|
||||
|
|
|
@ -84,7 +84,7 @@ where
|
|||
let cx = ecx.cx();
|
||||
let mut candidates = vec![];
|
||||
|
||||
// FIXME(effects): We elaborate here because the implied const bounds
|
||||
// FIXME(const_trait_impl): We elaborate here because the implied const bounds
|
||||
// aren't necessarily elaborated. We probably should prefix this query
|
||||
// with `explicit_`...
|
||||
for clause in elaborate::elaborate(
|
||||
|
|
|
@ -609,8 +609,6 @@ where
|
|||
return Err(NoSolution);
|
||||
}
|
||||
|
||||
// FIXME(effects): Implement this when we get const working in the new solver
|
||||
|
||||
// `Destruct` is automatically implemented for every type in
|
||||
// non-const environments.
|
||||
ecx.probe_builtin_trait_candidate(BuiltinImplSource::Misc)
|
||||
|
|
|
@ -217,7 +217,7 @@ impl<'a, 'tcx> Annotator<'a, 'tcx> {
|
|||
|
||||
// `impl const Trait for Type` items forward their const stability to their
|
||||
// immediate children.
|
||||
// FIXME(effects): how is this supposed to interact with `#[rustc_const_stable_indirect]`?
|
||||
// FIXME(const_trait_impl): how is this supposed to interact with `#[rustc_const_stable_indirect]`?
|
||||
// Currently, once that is set, we do not inherit anything from the parent any more.
|
||||
if const_stab.is_none() {
|
||||
debug!("annotate: const_stab not found, parent = {:?}", self.parent_const_stab);
|
||||
|
|
|
@ -538,7 +538,7 @@ impl<'a, 'tcx> TypeErrCtxt<'a, 'tcx> {
|
|||
}
|
||||
|
||||
ty::PredicateKind::Clause(ty::ClauseKind::HostEffect(predicate)) => {
|
||||
// FIXME(effects): We should recompute the predicate with `~const`
|
||||
// FIXME(const_trait_impl): We should recompute the predicate with `~const`
|
||||
// if it's `const`, and if it holds, explain that this bound only
|
||||
// *conditionally* holds. If that fails, we should also do selection
|
||||
// to drill this down to an impl or built-in source, so we can
|
||||
|
@ -2641,7 +2641,7 @@ impl<'a, 'tcx> TypeErrCtxt<'a, 'tcx> {
|
|||
_span: Span,
|
||||
) -> UnsatisfiedConst {
|
||||
let unsatisfied_const = UnsatisfiedConst(false);
|
||||
// FIXME(effects)
|
||||
// FIXME(const_trait_impl)
|
||||
unsatisfied_const
|
||||
}
|
||||
|
||||
|
@ -3052,7 +3052,7 @@ impl<'a, 'tcx> TypeErrCtxt<'a, 'tcx> {
|
|||
// Make a fresh inference variable so we can determine what the generic parameters
|
||||
// of the trait are.
|
||||
let var = self.next_ty_var(DUMMY_SP);
|
||||
// FIXME(effects)
|
||||
// FIXME(const_trait_impl)
|
||||
let trait_ref = ty::TraitRef::new(self.tcx, trait_def_id, [ty.skip_binder(), var]);
|
||||
let obligation = Obligation::new(
|
||||
self.tcx,
|
||||
|
|
|
@ -3751,7 +3751,7 @@ impl<'a, 'tcx> TypeErrCtxt<'a, 'tcx> {
|
|||
trait_pred.skip_binder().self_ty(),
|
||||
diagnostic_name,
|
||||
),
|
||||
// FIXME(effects, const_trait_impl) derive_const as suggestion?
|
||||
// FIXME(const_trait_impl) derive_const as suggestion?
|
||||
format!("#[derive({diagnostic_name})]\n"),
|
||||
Applicability::MaybeIncorrect,
|
||||
);
|
||||
|
|
|
@ -374,7 +374,7 @@ impl<'a, 'tcx> ObligationProcessor for FulfillProcessor<'a, 'tcx> {
|
|||
| ty::PredicateKind::Coerce(_)
|
||||
| ty::PredicateKind::Clause(ty::ClauseKind::ConstEvaluatable(..))
|
||||
| ty::PredicateKind::ConstEquate(..)
|
||||
// FIXME(effects): We may need to do this using the higher-ranked
|
||||
// FIXME(const_trait_impl): We may need to do this using the higher-ranked
|
||||
// pred instead of just instantiating it with placeholders b/c of
|
||||
// higher-ranked implied bound issues in the old solver.
|
||||
| ty::PredicateKind::Clause(ty::ClauseKind::HostEffect(..)) => {
|
||||
|
|
|
@ -1170,8 +1170,6 @@ impl<'cx, 'tcx> SelectionContext<'cx, 'tcx> {
|
|||
_obligation: &PolyTraitObligation<'tcx>,
|
||||
candidates: &mut SelectionCandidateSet<'tcx>,
|
||||
) {
|
||||
// FIXME(effects): Destruct is not const yet, and it is implemented
|
||||
// by all types today in non-const setting.
|
||||
candidates.vec.push(BuiltinCandidate { has_nested: false });
|
||||
}
|
||||
|
||||
|
|
|
@ -81,7 +81,6 @@ fn resolve_instance_raw<'tcx>(
|
|||
}
|
||||
} else {
|
||||
debug!(" => free item");
|
||||
// FIXME(effects): we may want to erase the effect param if that is present on this item.
|
||||
ty::InstanceKind::Item(def_id)
|
||||
};
|
||||
|
||||
|
|
|
@ -174,7 +174,6 @@ impl<I: Interner> UpcastFrom<I, TraitRef<I>> for TraitPredicate<I> {
|
|||
|
||||
impl<I: Interner> fmt::Debug for TraitPredicate<I> {
|
||||
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||
// FIXME(effects) printing?
|
||||
write!(f, "TraitPredicate({:?}, polarity:{:?})", self.trait_ref, self.polarity)
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue