From c7eee8fb059fc9639f2a4e5ef749dc3701bf3377 Mon Sep 17 00:00:00 2001 From: Marijn Haverbeke Date: Fri, 7 Oct 2011 14:46:23 +0200 Subject: [PATCH] Stop registering cleanups for types that don't need them --- src/comp/middle/trans_common.rs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/comp/middle/trans_common.rs b/src/comp/middle/trans_common.rs index 32dbb5334d7..0a882c0d94b 100644 --- a/src/comp/middle/trans_common.rs +++ b/src/comp/middle/trans_common.rs @@ -264,11 +264,13 @@ tag cleanup { } fn add_clean(cx: @block_ctxt, val: ValueRef, ty: ty::t) { + if !ty::type_needs_drop(bcx_tcx(cx), ty) { ret; } let scope_cx = find_scope_cx(cx); scope_cx.cleanups += [clean(bind drop_ty(_, val, ty))]; scope_cx.lpad_dirty = true; } fn add_clean_temp(cx: @block_ctxt, val: ValueRef, ty: ty::t) { + if !ty::type_needs_drop(bcx_tcx(cx), ty) { ret; } fn spill_and_drop(cx: @block_ctxt, val: ValueRef, ty: ty::t) -> @block_ctxt { let bcx = cx; @@ -283,6 +285,7 @@ fn add_clean_temp(cx: @block_ctxt, val: ValueRef, ty: ty::t) { scope_cx.lpad_dirty = true; } fn add_clean_temp_mem(cx: @block_ctxt, val: ValueRef, ty: ty::t) { + if !ty::type_needs_drop(bcx_tcx(cx), ty) { ret; } let scope_cx = find_scope_cx(cx); scope_cx.cleanups += [clean_temp(val, bind drop_ty(_, val, ty))]; scope_cx.lpad_dirty = true;