diff options
| author | Luqman Aden <laden@csclub.uwaterloo.ca> | 2013-06-01 17:39:39 -0400 |
|---|---|---|
| committer | Luqman Aden <laden@csclub.uwaterloo.ca> | 2013-06-01 17:41:07 -0400 |
| commit | 64759c9f25993d255c7ced4edecdd14a75e149b0 (patch) | |
| tree | 6ff289c3f8f6c85f23a8742b835ccca51c665f99 | |
| parent | 44af5064d0ac3d45223f1555b299f10fd4902f5c (diff) | |
| download | rust-64759c9f25993d255c7ced4edecdd14a75e149b0.tar.gz rust-64759c9f25993d255c7ced4edecdd14a75e149b0.zip | |
librustc: Have destructor run for unit-like structs.
| -rw-r--r-- | src/librustc/middle/trans/expr.rs | 10 |
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; } _ => { |
