Remove redundant calls to resolve_vars_with_obligations
This commit is contained in:
parent
553bfe23d0
commit
6f8bb9d66d
@ -1037,6 +1037,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
|
|||||||
/// Returns false if the coercion creates any obligations that result in
|
/// Returns false if the coercion creates any obligations that result in
|
||||||
/// errors.
|
/// errors.
|
||||||
pub fn can_coerce(&self, expr_ty: Ty<'tcx>, target: Ty<'tcx>) -> bool {
|
pub fn can_coerce(&self, expr_ty: Ty<'tcx>, target: Ty<'tcx>) -> bool {
|
||||||
|
// FIXME(-Ztrait-solver=next): We need to structurally resolve both types here.
|
||||||
let source = self.resolve_vars_with_obligations(expr_ty);
|
let source = self.resolve_vars_with_obligations(expr_ty);
|
||||||
debug!("coercion::can_with_predicates({:?} -> {:?})", source, target);
|
debug!("coercion::can_with_predicates({:?} -> {:?})", source, target);
|
||||||
|
|
||||||
|
@ -260,7 +260,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
|
|||||||
));
|
));
|
||||||
let expr = expr.peel_drop_temps();
|
let expr = expr.peel_drop_temps();
|
||||||
let cause = self.misc(expr.span);
|
let cause = self.misc(expr.span);
|
||||||
let expr_ty = self.resolve_vars_with_obligations(checked_ty);
|
let expr_ty = self.resolve_vars_if_possible(checked_ty);
|
||||||
let mut err = self.err_ctxt().report_mismatched_types(&cause, expected, expr_ty, e);
|
let mut err = self.err_ctxt().report_mismatched_types(&cause, expected, expr_ty, e);
|
||||||
|
|
||||||
let is_insufficiently_polymorphic =
|
let is_insufficiently_polymorphic =
|
||||||
|
@ -950,7 +950,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
|
|||||||
if !expected.is_unit() {
|
if !expected.is_unit() {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
let found = self.resolve_vars_with_obligations(found);
|
let found = self.resolve_vars_if_possible(found);
|
||||||
|
|
||||||
let in_loop = self.is_loop(id)
|
let in_loop = self.is_loop(id)
|
||||||
|| self
|
|| self
|
||||||
|
@ -2994,7 +2994,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
|
|||||||
// This occurs for UFCS desugaring of `T::method`, where there is no
|
// This occurs for UFCS desugaring of `T::method`, where there is no
|
||||||
// receiver expression for the method call, and thus no autoderef.
|
// receiver expression for the method call, and thus no autoderef.
|
||||||
if let SelfSource::QPath(_) = source {
|
if let SelfSource::QPath(_) = source {
|
||||||
return is_local(self.resolve_vars_with_obligations(rcvr_ty));
|
return is_local(rcvr_ty);
|
||||||
}
|
}
|
||||||
|
|
||||||
self.autoderef(span, rcvr_ty).any(|(ty, _)| is_local(ty))
|
self.autoderef(span, rcvr_ty).any(|(ty, _)| is_local(ty))
|
||||||
|
Loading…
x
Reference in New Issue
Block a user