Add term to ExistentialProjection
Also prevent ICE when adding a const in associated const equality.
This commit is contained in:
parent
f396888c4d
commit
1c1ce2fbda
35 changed files with 213 additions and 71 deletions
|
@ -756,8 +756,7 @@ impl<'tcx> AutoTraitFinder<'tcx> {
|
|||
// when we started out trying to unify
|
||||
// some inference variables. See the comment above
|
||||
// for more infomration
|
||||
if p.term().skip_binder().ty().map_or(false, |ty| ty.has_infer_types())
|
||||
{
|
||||
if p.term().skip_binder().ty().has_infer_types() {
|
||||
if !self.evaluate_nested_obligations(
|
||||
ty,
|
||||
v.into_iter(),
|
||||
|
@ -779,7 +778,7 @@ impl<'tcx> AutoTraitFinder<'tcx> {
|
|||
// However, we should always make progress (either by generating
|
||||
// subobligations or getting an error) when we started off with
|
||||
// inference variables
|
||||
if p.term().skip_binder().ty().has_infer_types() {
|
||||
if p.term().skip_binder().has_infer_types() {
|
||||
panic!("Unexpected result when selecting {:?} {:?}", ty, obligation)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1314,7 +1314,7 @@ impl<'a, 'tcx> InferCtxtPrivExt<'a, 'tcx> for InferCtxt<'a, 'tcx> {
|
|||
| ObligationCauseCode::ObjectCastObligation(_)
|
||||
| ObligationCauseCode::OpaqueType
|
||||
);
|
||||
// FIXME(...): Handle Consts here
|
||||
// FIXME(associated_const_equality): Handle Consts here
|
||||
let data_ty = data.term.ty().unwrap();
|
||||
if let Err(error) = self.at(&obligation.cause, obligation.param_env).eq_exp(
|
||||
is_normalized_ty_expected,
|
||||
|
|
|
@ -571,7 +571,7 @@ fn object_ty_for_trait<'tcx>(
|
|||
// `trait MyTrait: for<'s> OtherTrait<&'s T, Output=bool>`.
|
||||
super_trait_ref.map_bound(|super_trait_ref| {
|
||||
ty::ExistentialPredicate::Projection(ty::ExistentialProjection {
|
||||
ty: tcx.mk_projection(item.def_id, super_trait_ref.substs),
|
||||
term: tcx.mk_projection(item.def_id, super_trait_ref.substs).into(),
|
||||
item_def_id: item.def_id,
|
||||
substs: super_trait_ref.substs,
|
||||
})
|
||||
|
|
|
@ -212,7 +212,7 @@ fn project_and_unify_type<'cx, 'tcx>(
|
|||
debug!(?normalized_ty, ?obligations, "project_and_unify_type result");
|
||||
|
||||
let infcx = selcx.infcx();
|
||||
// FIXME(...): Handle consts here as well as types.
|
||||
// FIXME(associated_const_equality): Handle consts here as well as types.
|
||||
let obligation_pred_ty = obligation.predicate.term.ty().unwrap();
|
||||
match infcx.at(&obligation.cause, obligation.param_env).eq(normalized_ty, obligation_pred_ty) {
|
||||
Ok(InferOk { obligations: inferred_obligations, value: () }) => {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue