diff --git a/src/comp/middle/last_use.rs b/src/comp/middle/last_use.rs index 4b0ff3c7b38..0a78a5fb0cd 100644 --- a/src/comp/middle/last_use.rs +++ b/src/comp/middle/last_use.rs @@ -129,14 +129,21 @@ fn visit_expr(ex: @expr, cx: ctx, v: visit::vt) { } expr_call(f, args, _) { v.visit_expr(f, cx, v); - let i = 0u; - for arg_t in ty::ty_fn_args(cx.tcx, ty::expr_ty(cx.tcx, f)) { - alt arg_t.mode { - by_mut_ref. { clear_if_path(cx, args[i], v, false); } - _ { v.visit_expr(args[i], cx, v); } + let i = 0u, fns = []; + let arg_ts = ty::ty_fn_args(cx.tcx, ty::expr_ty(cx.tcx, f)); + for arg in args { + alt arg.node { + expr_fn(_) { fns += [arg]; } + _ { + alt arg_ts[i].mode { + by_mut_ref. { clear_if_path(cx, arg, v, false); } + _ { v.visit_expr(arg, cx, v); } + } + } } i += 1u; } + for f in fns { v.visit_expr(f, cx, v); } } _ { visit::visit_expr(ex, cx, v); } }