about summary refs log tree commit diff
path: root/src/librustc_save_analysis
diff options
context:
space:
mode:
authorNick Cameron <ncameron@mozilla.com>2017-01-25 14:40:47 +1300
committerNick Cameron <ncameron@mozilla.com>2017-01-27 07:21:06 +1300
commit36ad34d343c364f9d9570d5bea4d253882577f4e (patch)
treed13da683d92c9e95129eff19f75583af43e1cf0b /src/librustc_save_analysis
parent491b978822a56f23acf9ba46f90861958bc1e36c (diff)
downloadrust-36ad34d343c364f9d9570d5bea4d253882577f4e.tar.gz
rust-36ad34d343c364f9d9570d5bea4d253882577f4e.zip
save-analysis: get tables directly, accomodating them being missing
Fixes an ICE when running with save-analsysis after an error
Diffstat (limited to 'src/librustc_save_analysis')
-rw-r--r--src/librustc_save_analysis/dump_visitor.rs13
1 files changed, 9 insertions, 4 deletions
diff --git a/src/librustc_save_analysis/dump_visitor.rs b/src/librustc_save_analysis/dump_visitor.rs
index 74521fe465b..f128167bbf6 100644
--- a/src/librustc_save_analysis/dump_visitor.rs
+++ b/src/librustc_save_analysis/dump_visitor.rs
@@ -111,11 +111,16 @@ impl<'l, 'tcx: 'l, 'll, D: Dump + 'll> DumpVisitor<'l, 'tcx, 'll, D> {
     fn nest_tables<F>(&mut self, item_id: NodeId, f: F)
         where F: FnOnce(&mut DumpVisitor<'l, 'tcx, 'll, D>)
     {
-        let old_tables = self.save_ctxt.tables;
         let item_def_id = self.tcx.hir.local_def_id(item_id);
-        self.save_ctxt.tables = self.tcx.item_tables(item_def_id);
-        f(self);
-        self.save_ctxt.tables = old_tables;
+        match self.tcx.tables.borrow().get(&item_def_id) {
+            Some(tables) => {
+                let old_tables = self.save_ctxt.tables;
+                self.save_ctxt.tables = tables;
+                f(self);
+                self.save_ctxt.tables = old_tables;
+            }
+            None => f(self),
+        }
     }
 
     pub fn dump_crate_info(&mut self, name: &str, krate: &ast::Crate) {