Guard variance inference for params bound in non-variance context.
Before adding a variance constrant for a given early-bound param, check if it was meant to be inferred. To support the above, added `fn is_to_be_inferred` to `variance::ConstraintContext`.
This commit is contained in:
parent
787f4151e3
commit
0e30f07abc
@ -533,6 +533,10 @@ impl<'a> ConstraintContext<'a> {
|
||||
}
|
||||
}
|
||||
|
||||
fn is_to_be_inferred(&self, param_id: ast::NodeId) -> bool {
|
||||
self.terms_cx.inferred_map.contains_key(¶m_id)
|
||||
}
|
||||
|
||||
fn declared_variance(&self,
|
||||
param_def_id: ast::DefId,
|
||||
item_def_id: ast::DefId,
|
||||
@ -788,8 +792,10 @@ impl<'a> ConstraintContext<'a> {
|
||||
variance: VarianceTermPtr<'a>) {
|
||||
match region {
|
||||
ty::ReEarlyBound(param_id, _, _) => {
|
||||
let index = self.inferred_index(param_id);
|
||||
self.add_constraint(index, variance);
|
||||
if self.is_to_be_inferred(param_id) {
|
||||
let index = self.inferred_index(param_id);
|
||||
self.add_constraint(index, variance);
|
||||
}
|
||||
}
|
||||
|
||||
ty::ReStatic => { }
|
||||
|
Loading…
x
Reference in New Issue
Block a user