From c076d3ccc0a0cfc9dc61c4a3cac9ae358781f7d5 Mon Sep 17 00:00:00 2001 From: Patrick Walton Date: Thu, 2 Aug 2012 18:14:05 -0700 Subject: [PATCH] rustc: Translate class literals correctly if the class has a destructor --- src/rustc/middle/trans/base.rs | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/rustc/middle/trans/base.rs b/src/rustc/middle/trans/base.rs index ea0661f3510..203d17ec1a9 100644 --- a/src/rustc/middle/trans/base.rs +++ b/src/rustc/middle/trans/base.rs @@ -3452,7 +3452,17 @@ fn trans_struct(block_context: block, span: span, fields: ~[ast::field], } } - let dest = GEPi(block_context, dest_address, ~[0, index]); + // If the class has a destructor, our GEP is a little more + // complicated. + let dest; + if ty::ty_dtor(block_context.tcx(), class_id).is_some() { + dest = GEPi(block_context, + GEPi(block_context, dest_address, ~[0, 1]), + ~[0, index]); + } else { + dest = GEPi(block_context, dest_address, ~[0, index]); + } + block_context = trans_expr_save_in(block_context, field.node.expr, dest);