about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--src/librustc/middle/mem_categorization.rs26
1 files changed, 15 insertions, 11 deletions
diff --git a/src/librustc/middle/mem_categorization.rs b/src/librustc/middle/mem_categorization.rs
index bb44b1f55cb..b62884c057a 100644
--- a/src/librustc/middle/mem_categorization.rs
+++ b/src/librustc/middle/mem_categorization.rs
@@ -604,17 +604,21 @@ impl<'t,'tcx,TYPER:Typer<'tcx>> MemCategorizationContext<'t,TYPER> {
                           ty::FnMutUnboxedClosureKind => ast::Many,
                           ty::FnOnceUnboxedClosureKind => ast::Once,
                       };
-                      Ok(Rc::new(cmt_ {
-                          id: id,
-                          span: span,
-                          cat: cat_copied_upvar(CopiedUpvar {
-                              upvar_id: var_id,
-                              onceness: onceness,
-                              capturing_proc: fn_node_id,
-                          }),
-                          mutbl: MutabilityCategory::from_local(self.tcx(), var_id),
-                          ty: expr_ty
-                      }))
+                      if self.typer.capture_mode(fn_node_id) == ast::CaptureByRef {
+                          self.cat_upvar(id, span, var_id, fn_node_id)
+                      } else {
+                          Ok(Rc::new(cmt_ {
+                              id: id,
+                              span: span,
+                              cat: cat_copied_upvar(CopiedUpvar {
+                                  upvar_id: var_id,
+                                  onceness: onceness,
+                                  capturing_proc: fn_node_id,
+                              }),
+                              mutbl: MutabilityCategory::from_local(self.tcx(), var_id),
+                              ty: expr_ty
+                          }))
+                      }
                   }
                   _ => {
                       self.tcx().sess.span_bug(