about summary refs log tree commit diff
diff options
context:
space:
mode:
authorMarijn Haverbeke <marijnh@gmail.com>2012-02-14 15:59:41 +0100
committerMarijn Haverbeke <marijnh@gmail.com>2012-02-14 15:59:41 +0100
commit857ad58dce92eb2efcd768b588aded67b9d39418 (patch)
treee90e54b59092630da1458907a4b5726aa2c8244f
parent90324a1978bd6b515343edaf8fe466e773e9840d (diff)
downloadrust-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.rs4
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) {