diff options
| author | Marijn Haverbeke <marijnh@gmail.com> | 2012-02-14 15:59:41 +0100 |
|---|---|---|
| committer | Marijn Haverbeke <marijnh@gmail.com> | 2012-02-14 15:59:41 +0100 |
| commit | 857ad58dce92eb2efcd768b588aded67b9d39418 (patch) | |
| tree | e90e54b59092630da1458907a4b5726aa2c8244f | |
| parent | 90324a1978bd6b515343edaf8fe466e773e9840d (diff) | |
| download | rust-857ad58dce92eb2efcd768b588aded67b9d39418.tar.gz rust-857ad58dce92eb2efcd768b588aded67b9d39418.zip | |
Fix double-cleanup bug in patch 57c7645cb83e609ff
Things would run fine (probably by sheer luck) but valgrind didn't approve.
| -rw-r--r-- | src/comp/middle/trans/base.rs | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/src/comp/middle/trans/base.rs b/src/comp/middle/trans/base.rs index 08e3e04cb91..9e8cfbb321c 100644 --- a/src/comp/middle/trans/base.rs +++ b/src/comp/middle/trans/base.rs @@ -3302,9 +3302,11 @@ fn trans_expr(bcx: @block_ctxt, e: @ast::expr, dest: dest) -> @block_ctxt { ast::expr_call(f, args, _) { ret trans_call(bcx, f, args, e.id, dest); } - ast::expr_field(_, _, _) { + ast::expr_field(base, _, _) { + if dest == ignore { ret trans_expr(bcx, base, ignore); } let callee = trans_callee(bcx, e), ty = expr_ty(bcx, e); let lv = lval_maybe_callee_to_lval(callee, ty); + revoke_clean(lv.bcx, lv.val); ret memmove_ty(lv.bcx, get_dest_addr(dest), lv.val, ty); } ast::expr_index(base, idx) { |
