about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--src/librustc/hir/def.rs11
-rw-r--r--src/librustc_save_analysis/lib.rs2
2 files changed, 9 insertions, 4 deletions
diff --git a/src/librustc/hir/def.rs b/src/librustc/hir/def.rs
index feefc43f401..ce04a7c897a 100644
--- a/src/librustc/hir/def.rs
+++ b/src/librustc/hir/def.rs
@@ -85,10 +85,15 @@ impl PathResolution {
 
     /// Get the definition, if fully resolved, otherwise panic.
     pub fn full_def(&self) -> Def {
-        if self.depth != 0 {
-            bug!("path not fully resolved: {:?}", self);
+        self.maybe_full_def().unwrap_or_else(|| bug!("path not fully resolved: {:?}", self))
+    }
+
+    pub fn maybe_full_def(&self) -> Option<Def> {
+        if self.depth == 0 {
+            Some(self.base_def)
+        } else {
+            None
         }
-        self.base_def
     }
 
     pub fn kind_name(&self) -> &'static str {
diff --git a/src/librustc_save_analysis/lib.rs b/src/librustc_save_analysis/lib.rs
index 778f0184141..4c59f5e8a83 100644
--- a/src/librustc_save_analysis/lib.rs
+++ b/src/librustc_save_analysis/lib.rs
@@ -497,7 +497,7 @@ impl<'l, 'tcx: 'l> SaveContext<'l, 'tcx> {
     }
 
     pub fn get_path_data(&self, id: NodeId, path: &ast::Path) -> Option<Data> {
-        let def = self.tcx.expect_def(id);
+        let def = option_try!(self.tcx.expect_resolution(id).maybe_full_def());
         let sub_span = self.span_utils.span_for_last_ident(path.span);
         filter!(self.span_utils, sub_span, path.span, None);
         match def {