diff options
| author | Oliver Schneider <oli-obk@users.noreply.github.com> | 2017-08-24 15:30:35 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2017-08-24 15:30:35 +0200 |
| commit | 110d50e7f95173c0bede64e588f832988d30c7a2 (patch) | |
| tree | 4f095d2ab9d888a6b616c9be187f57b892ba29b0 | |
| parent | 9ede346ee26001ad4e3365f734e7dcd991095edf (diff) | |
| parent | f860ad8d2eaa2cc022d4d4a8427a2a908f39a6b3 (diff) | |
| download | rust-110d50e7f95173c0bede64e588f832988d30c7a2.tar.gz rust-110d50e7f95173c0bede64e588f832988d30c7a2.zip | |
Merge branch 'master' into libstd
| -rw-r--r-- | src/librustc_mir/interpret/eval_context.rs | 5 | ||||
| -rw-r--r-- | tests/run-pass/closure-field-ty.rs | 10 |
2 files changed, 15 insertions, 0 deletions
diff --git a/src/librustc_mir/interpret/eval_context.rs b/src/librustc_mir/interpret/eval_context.rs index b516fab4afa..9fbc32c4f00 100644 --- a/src/librustc_mir/interpret/eval_context.rs +++ b/src/librustc_mir/interpret/eval_context.rs @@ -1176,6 +1176,11 @@ impl<'a, 'tcx, M: Machine<'tcx>> EvalContext<'a, 'tcx, M> { packed: false, }), + ty::TyClosure(def_id, ref closure_substs) => Ok(TyAndPacked { + ty: closure_substs.upvar_tys(def_id, self.tcx).nth(field_index).unwrap(), + packed: false, + }), + _ => { err!(Unimplemented( format!("can't handle type: {:?}, {:?}", ty, ty.sty), diff --git a/tests/run-pass/closure-field-ty.rs b/tests/run-pass/closure-field-ty.rs new file mode 100644 index 00000000000..0d27728d223 --- /dev/null +++ b/tests/run-pass/closure-field-ty.rs @@ -0,0 +1,10 @@ +// miri issue #304 +fn main() { + let mut y = 0; + { + let mut box_maybe_closure = Box::new(None); + *box_maybe_closure = Some(|| { y += 1; }); + (box_maybe_closure.unwrap())(); + } + assert_eq!(y, 1); +} |
