about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorNiko Matsakis <niko@alum.mit.edu>2015-01-27 13:45:42 -0500
committerNiko Matsakis <niko@alum.mit.edu>2015-02-01 06:13:05 -0500
commitf5281e2bb56fa9ef4debf04e6141d2ad3650ca61 (patch)
tree41c819d435955b1e037f76e3bbca7b9afab45701 /src
parentbc41cc0ec9fbe395598fde5ef22b3e95582a5236 (diff)
downloadrust-f5281e2bb56fa9ef4debf04e6141d2ad3650ca61.tar.gz
rust-f5281e2bb56fa9ef4debf04e6141d2ad3650ca61.zip
Do not make fake types for upvars if we haven't yet inferred whether they are borrowed
or by value.
Diffstat (limited to 'src')
-rw-r--r--src/librustc/middle/ty.rs42
1 files changed, 18 insertions, 24 deletions
diff --git a/src/librustc/middle/ty.rs b/src/librustc/middle/ty.rs
index cd9684b840b..f1e73ddc5a1 100644
--- a/src/librustc/middle/ty.rs
+++ b/src/librustc/middle/ty.rs
@@ -5643,32 +5643,26 @@ pub fn closure_upvars<'tcx>(typer: &mc::Typer<'tcx>,
                             closure_expr_id: closure_id.node
                         };
 
-                        let captured_freevar_ty = match typer.upvar_capture(upvar_id) {
-                            Some(UpvarCapture::ByValue) => {
-                                freevar_ty
-                            }
-
-                            Some(UpvarCapture::ByRef(borrow)) => {
-                                mk_rptr(tcx,
-                                        tcx.mk_region(borrow.region),
-                                        ty::mt {
-                                            ty: freevar_ty,
-                                            mutbl: borrow.kind.to_mutbl_lossy(),
-                                        })
-                            }
+                        typer.upvar_capture(upvar_id).map(|capture| {
+                            let freevar_ref_ty = match capture {
+                                UpvarCapture::ByValue => {
+                                    freevar_ty
+                                }
+                                UpvarCapture::ByRef(borrow) => {
+                                    mk_rptr(tcx,
+                                            tcx.mk_region(borrow.region),
+                                            ty::mt {
+                                                ty: freevar_ty,
+                                                mutbl: borrow.kind.to_mutbl_lossy(),
+                                            })
+                                }
+                            };
 
-                            None => {
-                                // FIXME(#16640) we should really return None here;
-                                // but that requires better inference integration,
-                                // for now gin up something.
-                                freevar_ty
+                            ClosureUpvar {
+                                def: freevar.def,
+                                span: freevar.span,
+                                ty: freevar_ref_ty,
                             }
-                        };
-
-                        Some(ClosureUpvar {
-                            def: freevar.def,
-                            span: freevar.span,
-                            ty: captured_freevar_ty,
                         })
                     })
                     .collect()