about summary refs log tree commit diff
diff options
context:
space:
mode:
authorLuqman Aden <laden@csclub.uwaterloo.ca>2013-06-01 17:39:39 -0400
committerLuqman Aden <laden@csclub.uwaterloo.ca>2013-06-01 17:41:07 -0400
commit64759c9f25993d255c7ced4edecdd14a75e149b0 (patch)
tree6ff289c3f8f6c85f23a8742b835ccca51c665f99
parent44af5064d0ac3d45223f1555b299f10fd4902f5c (diff)
downloadrust-64759c9f25993d255c7ced4edecdd14a75e149b0.tar.gz
rust-64759c9f25993d255c7ced4edecdd14a75e149b0.zip
librustc: Have destructor run for unit-like structs.
-rw-r--r--src/librustc/middle/trans/expr.rs10
1 files changed, 8 insertions, 2 deletions
diff --git a/src/librustc/middle/trans/expr.rs b/src/librustc/middle/trans/expr.rs
index fa8c3cd8879..997819453ec 100644
--- a/src/librustc/middle/trans/expr.rs
+++ b/src/librustc/middle/trans/expr.rs
@@ -727,8 +727,14 @@ fn trans_def_dps_unadjusted(bcx: block, ref_expr: @ast::expr,
             }
         }
         ast::def_struct(*) => {
-            // Nothing to do here.
-            // FIXME #6572: May not be true in the case of classes with destructors.
+            let ty = expr_ty(bcx, ref_expr);
+            match ty::get(ty).sty {
+                ty::ty_struct(did, _) if ty::has_dtor(ccx.tcx, did) => {
+                    let repr = adt::represent_type(ccx, ty);
+                    adt::trans_start_init(bcx, repr, lldest, 0);
+                }
+                _ => {}
+            }
             return bcx;
         }
         _ => {