diff options
| author | Niko Matsakis <niko@alum.mit.edu> | 2016-11-08 11:16:39 -0500 |
|---|---|---|
| committer | Niko Matsakis <niko@alum.mit.edu> | 2016-11-16 13:57:45 -0500 |
| commit | eeb45c7591ae7c7e843a132fe937b97a7d670581 (patch) | |
| tree | c1fc601365f1f09b6616eb5b15842d952e313e07 | |
| parent | 3fd67eba87fc4bd634af34d170d7683397aeca3a (diff) | |
make distinct Hir() nodes in the graph for impl items
| -rw-r--r-- | src/librustc/dep_graph/visit.rs | 9 | ||||
| -rw-r--r-- | src/librustc/hir/map/mod.rs | 8 | ||||
| -rw-r--r-- | src/librustc_incremental/calculate_svh/mod.rs | 5 | ||||
| -rw-r--r-- | src/librustc_incremental/calculate_svh/svh_visitor.rs | 6 |
4 files changed, 17 insertions, 11 deletions
diff --git a/src/librustc/dep_graph/visit.rs b/src/librustc/dep_graph/visit.rs index 6d89bbba54e..600732fc6f7 100644 --- a/src/librustc/dep_graph/visit.rs +++ b/src/librustc/dep_graph/visit.rs @@ -47,13 +47,12 @@ pub fn visit_all_item_likes_in_krate<'a, 'tcx, V, F>(tcx: TyCtxt<'a, 'tcx, 'tcx> } fn visit_impl_item(&mut self, i: &'tcx hir::ImplItem) { - // TODO -- use the def-id of the impl for now - let impl_def_id = self.tcx.map.get_parent_did(i.id); - let task_id = (self.dep_node_fn)(impl_def_id); + let impl_item_def_id = self.tcx.map.local_def_id(i.id); + let task_id = (self.dep_node_fn)(impl_item_def_id); let _task = self.tcx.dep_graph.in_task(task_id.clone()); debug!("Started task {:?}", task_id); - assert!(!self.tcx.map.is_inlined_def_id(impl_def_id)); - self.tcx.dep_graph.read(DepNode::Hir(impl_def_id)); + assert!(!self.tcx.map.is_inlined_def_id(impl_item_def_id)); + self.tcx.dep_graph.read(DepNode::Hir(impl_item_def_id)); self.visitor.visit_impl_item(i); debug!("Ended task {:?}", task_id); } diff --git a/src/librustc/hir/map/mod.rs b/src/librustc/hir/map/mod.rs index c629ec66ca4..e684040a173 100644 --- a/src/librustc/hir/map/mod.rs +++ b/src/librustc/hir/map/mod.rs @@ -254,9 +254,14 @@ impl<'ast> Map<'ast> { return DepNode::Hir(def_id); } + EntryImplItem(..) => { + let def_id = self.local_def_id(id); + assert!(!self.is_inlined_def_id(def_id)); + return DepNode::Hir(def_id); + } + EntryForeignItem(p, _) | EntryTraitItem(p, _) | - EntryImplItem(p, _) | EntryVariant(p, _) | EntryExpr(p, _) | EntryStmt(p, _) | @@ -379,7 +384,6 @@ impl<'ast> Map<'ast> { } pub fn impl_item(&self, id: ImplItemId) -> &'ast ImplItem { - // TODO right now this triggers a read of the whole impl self.read(id.id); // NB: intentionally bypass `self.forest.krate()` so that we diff --git a/src/librustc_incremental/calculate_svh/mod.rs b/src/librustc_incremental/calculate_svh/mod.rs index 5697441b667..c08519090d2 100644 --- a/src/librustc_incremental/calculate_svh/mod.rs +++ b/src/librustc_incremental/calculate_svh/mod.rs @@ -207,6 +207,11 @@ impl<'a, 'tcx> Visitor<'tcx> for HashItemsVisitor<'a, 'tcx> { visit::walk_item(self, item); } + fn visit_impl_item(&mut self, impl_item: &'tcx hir::ImplItem) { + self.calculate_node_id(impl_item.id, |v| v.visit_impl_item(impl_item)); + visit::walk_impl_item(self, impl_item); + } + fn visit_foreign_item(&mut self, item: &'tcx hir::ForeignItem) { self.calculate_node_id(item.id, |v| v.visit_foreign_item(item)); visit::walk_foreign_item(self, item); diff --git a/src/librustc_incremental/calculate_svh/svh_visitor.rs b/src/librustc_incremental/calculate_svh/svh_visitor.rs index 3060e237fc1..3af6ee35f9e 100644 --- a/src/librustc_incremental/calculate_svh/svh_visitor.rs +++ b/src/librustc_incremental/calculate_svh/svh_visitor.rs @@ -503,10 +503,8 @@ impl<'a, 'hash, 'tcx> visit::Visitor<'tcx> for StrictVersionHashVisitor<'a, 'has // Each item is hashed independently; ignore nested items. } - fn visit_nested_impl_item(&mut self, impl_item_id: ImplItemId) { - // For now, we hash impl items as part of the containing impl. - let impl_item = self.tcx.map.impl_item(impl_item_id); - self.visit_impl_item(impl_item); + fn visit_nested_impl_item(&mut self, _: ImplItemId) { + // Impl items are hashed independently; ignore nested impl items. } fn visit_variant_data(&mut self, |
