Run the analysis process only once per closure, on the way up the tree.

This was the intention before but silly coding caused it to run twice if
there are nested closures.
This commit is contained in:
Niko Matsakis 2015-07-17 08:20:23 -04:00
parent 1e2677be72
commit 6b49f4ded7

@ -183,9 +183,8 @@ impl<'a,'tcx> AdjustBorrowKind<'a,'tcx> {
* Analysis starting point.
*/
self.visit_block(body);
debug!("analyze_closure(id={:?}, body.id={:?})", id, body.id);
debug!("analyzing closure `{}` with fn body id `{}`", id, body.id);
let mut euv = euv::ExprUseVisitor::new(self, self.fcx.infcx());
euv.walk_fn(decl, body);
@ -485,8 +484,8 @@ impl<'a, 'tcx, 'v> Visitor<'v> for AdjustBorrowKind<'a, 'tcx> {
// ignore nested fn items
}
visit::FkFnBlock => {
self.analyze_closure(id, decl, body);
visit::walk_fn(self, fn_kind, decl, body, span);
self.analyze_closure(id, span, decl, body);
}
}
}