about summary refs log tree commit diff
diff options
context:
space:
mode:
authorNiko Matsakis <niko@alum.mit.edu>2018-07-03 06:47:51 -0400
committerNiko Matsakis <niko@alum.mit.edu>2018-07-03 18:10:08 -0400
commit37db94d3f2e9c43bd34f09952029786178731289 (patch)
tree79ede56ab5ddccacbbe9a99ae89984e646d44ad2
parentf03c0366ad3b0afa267dd617c671c852b3e2bb73 (diff)
downloadrust-37db94d3f2e9c43bd34f09952029786178731289.tar.gz
rust-37db94d3f2e9c43bd34f09952029786178731289.zip
store the `HirId` of the upvar
-rw-r--r--src/librustc/ich/impls_mir.rs2
-rw-r--r--src/librustc/mir/mod.rs5
-rw-r--r--src/librustc_mir/build/mod.rs1
3 files changed, 6 insertions, 2 deletions
diff --git a/src/librustc/ich/impls_mir.rs b/src/librustc/ich/impls_mir.rs
index f43ac7ad0dd..6217f6c9fdd 100644
--- a/src/librustc/ich/impls_mir.rs
+++ b/src/librustc/ich/impls_mir.rs
@@ -30,7 +30,7 @@ impl_stable_hash_for!(struct mir::LocalDecl<'tcx> {
     internal,
     is_user_variable
 });
-impl_stable_hash_for!(struct mir::UpvarDecl { debug_name, by_ref, mutability });
+impl_stable_hash_for!(struct mir::UpvarDecl { debug_name, var_hir_id, by_ref, mutability });
 impl_stable_hash_for!(struct mir::BasicBlockData<'tcx> { statements, terminator, is_cleanup });
 impl_stable_hash_for!(struct mir::UnsafetyViolation { source_info, description, kind });
 impl_stable_hash_for!(struct mir::UnsafetyCheckResult { violations, unsafe_blocks });
diff --git a/src/librustc/mir/mod.rs b/src/librustc/mir/mod.rs
index dca0d4f442a..78c4966c6f9 100644
--- a/src/librustc/mir/mod.rs
+++ b/src/librustc/mir/mod.rs
@@ -15,7 +15,7 @@
 use graphviz::IntoCow;
 use hir::def::CtorKind;
 use hir::def_id::DefId;
-use hir::{self, InlineAsm};
+use hir::{self, HirId, InlineAsm};
 use middle::region;
 use mir::interpret::{EvalErrorKind, Scalar, Value};
 use mir::visit::MirVisitable;
@@ -785,6 +785,9 @@ impl<'tcx> LocalDecl<'tcx> {
 pub struct UpvarDecl {
     pub debug_name: Name,
 
+    /// `HirId` of the captured variable
+    pub var_hir_id: ClearCrossCrate<HirId>,
+
     /// If true, the capture is behind a reference.
     pub by_ref: bool,
 
diff --git a/src/librustc_mir/build/mod.rs b/src/librustc_mir/build/mod.rs
index 4db5c8e9278..2b18771a34f 100644
--- a/src/librustc_mir/build/mod.rs
+++ b/src/librustc_mir/build/mod.rs
@@ -534,6 +534,7 @@ fn construct_fn<'a, 'gcx, 'tcx, A>(hir: Cx<'a, 'gcx, 'tcx>,
             };
             let mut decl = UpvarDecl {
                 debug_name: keywords::Invalid.name(),
+                var_hir_id: ClearCrossCrate::Set(var_hir_id),
                 by_ref,
                 mutability: Mutability::Not,
             };