]> git.lizzy.rs Git - rust.git/commitdiff
mir: Don't forget to drop arguments.
authorEduard Burtescu <edy.burt@gmail.com>
Thu, 10 Mar 2016 04:35:41 +0000 (06:35 +0200)
committerEduard Burtescu <edy.burt@gmail.com>
Thu, 17 Mar 2016 20:48:07 +0000 (22:48 +0200)
src/librustc_mir/build/mod.rs

index 7fd959390de374c635cc95081a133149d0902e66..b40775f939f75a3abb3be55db739b4e1619ab7c4 100644 (file)
@@ -141,14 +141,17 @@ fn args_and_body(&mut self,
                 .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();