From bf792b922cb14ed7825246f169d60874f71aec78 Mon Sep 17 00:00:00 2001 From: Mahmut Bulut Date: Tue, 30 Oct 2012 23:37:09 +0200 Subject: [PATCH] * dropnzero_val fn added * zero-mem for not needed drop situation placed in Ignore --- src/rustc/middle/trans/datum.rs | 19 +++++++++++++++++++ src/rustc/middle/trans/expr.rs | 2 +- 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/src/rustc/middle/trans/datum.rs b/src/rustc/middle/trans/datum.rs index 5e11cdd479436..4a2c82cc7266f 100644 --- a/src/rustc/middle/trans/datum.rs +++ b/src/rustc/middle/trans/datum.rs @@ -542,6 +542,25 @@ impl Datum { }; } + fn dropnzero_val(bcx: block) -> block { + if !ty::type_needs_drop(bcx.tcx(), self.ty) { + return bcx; + } + + return match self.mode { + ByRef => { + glue::drop_ty(bcx, self.val, self.ty); + zero_mem(bcx, self.val, self.ty); + return bcx; + } + ByValue => { + glue::drop_ty_immediate(bcx, self.val, self.ty); + zero_mem(bcx, self.val, self.ty); + return bcx; + } + }; + } + fn box_body(bcx: block) -> Datum { /*! * diff --git a/src/rustc/middle/trans/expr.rs b/src/rustc/middle/trans/expr.rs index dee553536048a..9e1451a3fcd90 100644 --- a/src/rustc/middle/trans/expr.rs +++ b/src/rustc/middle/trans/expr.rs @@ -573,7 +573,7 @@ fn trans_rvalue_dps_unadjusted(bcx: block, expr: @ast::expr, if bcx.expr_is_lval(a) { let datum = unpack_datum!(bcx, trans_to_datum(bcx, a)); return match dest { - Ignore => datum.drop_val(bcx), + Ignore => datum.dropnzero_val(bcx), SaveIn(addr) => datum.move_to(bcx, INIT, addr) }; } else {