Remove intercrate and mark_ambiguous from Relation
This commit is contained in:
parent
48829ea74b
commit
a368316905
12 changed files with 22 additions and 133 deletions
|
@ -37,10 +37,6 @@ impl<'tcx> TypeRelation<'tcx> for Match<'tcx> {
|
|||
self.tcx
|
||||
}
|
||||
|
||||
fn intercrate(&self) -> bool {
|
||||
false
|
||||
}
|
||||
|
||||
fn param_env(&self) -> ty::ParamEnv<'tcx> {
|
||||
self.param_env
|
||||
}
|
||||
|
@ -48,10 +44,6 @@ impl<'tcx> TypeRelation<'tcx> for Match<'tcx> {
|
|||
true
|
||||
} // irrelevant
|
||||
|
||||
fn mark_ambiguous(&mut self) {
|
||||
bug!()
|
||||
}
|
||||
|
||||
fn relate_with_variance<T: Relate<'tcx>>(
|
||||
&mut self,
|
||||
_: ty::Variance,
|
||||
|
|
|
@ -22,8 +22,6 @@ pub enum Cause {
|
|||
pub trait TypeRelation<'tcx>: Sized {
|
||||
fn tcx(&self) -> TyCtxt<'tcx>;
|
||||
|
||||
fn intercrate(&self) -> bool;
|
||||
|
||||
fn param_env(&self) -> ty::ParamEnv<'tcx>;
|
||||
|
||||
/// Returns a static string we can use for printouts.
|
||||
|
@ -33,9 +31,6 @@ pub trait TypeRelation<'tcx>: Sized {
|
|||
/// relation. Just affects error messages.
|
||||
fn a_is_expected(&self) -> bool;
|
||||
|
||||
/// Used during coherence. If called, must emit an always-ambiguous obligation.
|
||||
fn mark_ambiguous(&mut self);
|
||||
|
||||
fn with_cause<F, R>(&mut self, _cause: Cause, f: F) -> R
|
||||
where
|
||||
F: FnOnce(&mut Self) -> R,
|
||||
|
@ -559,23 +554,16 @@ pub fn super_relate_tys<'tcx, R: TypeRelation<'tcx>>(
|
|||
&ty::Alias(ty::Opaque, ty::AliasTy { def_id: a_def_id, substs: a_substs, .. }),
|
||||
&ty::Alias(ty::Opaque, ty::AliasTy { def_id: b_def_id, substs: b_substs, .. }),
|
||||
) if a_def_id == b_def_id => {
|
||||
if relation.intercrate() {
|
||||
// During coherence, opaque types should be treated as equal to each other, even if their generic params
|
||||
// differ, as they could resolve to the same hidden type, even for different generic params.
|
||||
relation.mark_ambiguous();
|
||||
Ok(a)
|
||||
} else {
|
||||
let opt_variances = tcx.variances_of(a_def_id);
|
||||
let substs = relate_substs_with_variances(
|
||||
relation,
|
||||
a_def_id,
|
||||
opt_variances,
|
||||
a_substs,
|
||||
b_substs,
|
||||
false, // do not fetch `type_of(a_def_id)`, as it will cause a cycle
|
||||
)?;
|
||||
Ok(tcx.mk_opaque(a_def_id, substs))
|
||||
}
|
||||
let opt_variances = tcx.variances_of(a_def_id);
|
||||
let substs = relate_substs_with_variances(
|
||||
relation,
|
||||
a_def_id,
|
||||
opt_variances,
|
||||
a_substs,
|
||||
b_substs,
|
||||
false, // do not fetch `type_of(a_def_id)`, as it will cause a cycle
|
||||
)?;
|
||||
Ok(tcx.mk_opaque(a_def_id, substs))
|
||||
}
|
||||
|
||||
_ => Err(TypeError::Sorts(expected_found(relation, a, b))),
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue