From 8c14943dead216ce62b9197a6030dad8e2047428 Mon Sep 17 00:00:00 2001 From: Marijn Haverbeke Date: Mon, 2 Jan 2012 15:23:11 +0100 Subject: [PATCH] Properly handle expression blocks in kind.rs It was only noticing them in expr_block form, not as function bodies. Closes #1390 --- src/comp/middle/kind.rs | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/comp/middle/kind.rs b/src/comp/middle/kind.rs index b920a9758b1..00d5534bfec 100644 --- a/src/comp/middle/kind.rs +++ b/src/comp/middle/kind.rs @@ -44,6 +44,7 @@ fn check_crate(tcx: ty::ctxt, method_map: typeck::method_map, let visit = visit::mk_vt(@{ visit_expr: check_expr, visit_stmt: check_stmt, + visit_block: check_block, visit_fn: check_fn with *visit::default_visitor() }); @@ -117,12 +118,18 @@ fn check_fn_cap_clause(cx: ctx, } } -fn check_expr(e: @expr, cx: ctx, v: visit::vt) { +fn check_block(b: blk, cx: ctx, v: visit::vt) { + alt b.node.expr { + some(ex) { maybe_copy(cx, ex); } + _ {} + } + visit::visit_block(b, cx, v); +} +fn check_expr(e: @expr, cx: ctx, v: visit::vt) { alt e.node { expr_assign(_, ex) | expr_assign_op(_, _, ex) | - expr_block({node: {expr: some(ex), _}, _}) | - expr_unary(box(_), ex) | expr_unary(uniq(_), ex) { maybe_copy(cx, ex); } + expr_unary(box(_), ex) | expr_unary(uniq(_), ex) | expr_ret(some(ex)) { maybe_copy(cx, ex); } expr_copy(expr) { check_copy_ex(cx, expr, false); } // Vector add copies. -- GitLab