diff options
| author | Eduard Burtescu <edy.burt@gmail.com> | 2016-03-10 06:35:41 +0200 |
|---|---|---|
| committer | Eduard Burtescu <edy.burt@gmail.com> | 2016-03-17 22:48:07 +0200 |
| commit | 5f990fb4f000077216d96bf31ea33623a9875e9e (patch) | |
| tree | cba3fcf508a455ee09a6f1275f509fce039c195e /src | |
| parent | cfd768e2e69a3ca8f28d7bc49f2ae3ca744841c8 (diff) | |
| download | rust-5f990fb4f000077216d96bf31ea33623a9875e9e.tar.gz rust-5f990fb4f000077216d96bf31ea33623a9875e9e.zip | |
mir: Don't forget to drop arguments.
Diffstat (limited to 'src')
| -rw-r--r-- | src/librustc_mir/build/mod.rs | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/src/librustc_mir/build/mod.rs b/src/librustc_mir/build/mod.rs index 7fd959390de..b40775f939f 100644 --- a/src/librustc_mir/build/mod.rs +++ b/src/librustc_mir/build/mod.rs @@ -141,14 +141,17 @@ impl<'a,'tcx> Builder<'a,'tcx> { .chain(explicits) .enumerate() .map(|(index, (ty, pattern))| { + let lvalue = Lvalue::Arg(index as u32); if let Some(pattern) = pattern { - let lvalue = Lvalue::Arg(index as u32); let pattern = this.hir.irrefutable_pat(pattern); unpack!(block = this.lvalue_into_pattern(block, argument_extent, pattern, &lvalue)); } + // Make sure we drop (parts of) the argument even when not matched on. + this.schedule_drop(pattern.as_ref().map_or(ast_block.span, |pat| pat.span), + argument_extent, &lvalue, ty); ArgDecl { ty: ty, spread: false } }) .collect(); |
