diff options
| author | bors <bors@rust-lang.org> | 2015-06-08 22:26:16 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2015-06-08 22:26:16 +0000 |
| commit | 521f82eb12f939fa95aa06ad1649f4aa1420ddfd (patch) | |
| tree | 90dda17309953ee0dc59cf1798807459007772a4 | |
| parent | 02c33b690b9270ef7d26412fdf4a8498acfea1a7 (diff) | |
| parent | 2442f830cbe6317a9376a04ea4486923e32e4dd4 (diff) | |
Auto merge of #26079 - eefriedman:emit-closure, r=nrc
This isn't a very clean fix, but I'm not sure what a better fix would look like. Fixes #24779.
| -rw-r--r-- | src/librustc_trans/trans/expr.rs | 7 | ||||
| -rw-r--r-- | src/test/run-pass/issue-24779.rs | 13 |
2 files changed, 18 insertions, 2 deletions
diff --git a/src/librustc_trans/trans/expr.rs b/src/librustc_trans/trans/expr.rs index c5524ab8f38..e9804a11f2c 100644 --- a/src/librustc_trans/trans/expr.rs +++ b/src/librustc_trans/trans/expr.rs @@ -139,9 +139,12 @@ pub fn trans_into<'blk, 'tcx>(bcx: Block<'blk, 'tcx>, // have different types. let lldest = PointerCast(bcx, lldest, val_ty(global)); memcpy_ty(bcx, lldest, global, expr_ty_adjusted(bcx, expr)); + return bcx; } - // Don't do anything in the Ignore case, consts don't need drop. - return bcx; + // Even if we don't have a value to emit, and the expression + // doesn't have any side-effects, we still have to translate the + // body of any closures. + // FIXME: Find a better way of handling this case. } else { // The only way we're going to see a `const` at this point is if // it prefers in-place instantiation, likely because it contains diff --git a/src/test/run-pass/issue-24779.rs b/src/test/run-pass/issue-24779.rs new file mode 100644 index 00000000000..4f13b91cdb1 --- /dev/null +++ b/src/test/run-pass/issue-24779.rs @@ -0,0 +1,13 @@ +// Copyright 2015 The Rust Project Developers. See the COPYRIGHT +// file at the top-level directory of this distribution and at +// http://rust-lang.org/COPYRIGHT. +// +// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or +// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license +// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +fn main() { + assert_eq!((||||42)()(), 42); +} |
