diff --git a/src/comp/middle/trans.rs b/src/comp/middle/trans.rs index 600bf7e9e219..ad315df2dbff 100644 --- a/src/comp/middle/trans.rs +++ b/src/comp/middle/trans.rs @@ -6252,6 +6252,9 @@ fn trans_block(&@block_ctxt cx, &ast::block b) -> result { auto cleanup = bind drop_hoisted_ty(_, res_alloca.val, r_ty); find_outer_scope_cx(bcx).cleanups += [clean(cleanup)]; + + r = res(bcx, load_if_immediate(bcx, + res_alloca.val, r_ty)); } } } diff --git a/src/test/run-pass/expr-block-slot.rs b/src/test/run-pass/expr-block-slot.rs new file mode 100644 index 000000000000..4a196f060726 --- /dev/null +++ b/src/test/run-pass/expr-block-slot.rs @@ -0,0 +1,19 @@ +// xfail-stage0 + +// Regression test for issue #377 + +fn main() { + auto a = { + auto b = tup(3); + b + }; + + assert a._0 == 3; + + auto c = { + auto d = rec(v=3); + d + }; + + assert c.v == 3; +}