about summary refs log tree commit diff
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2016-02-11 09:01:12 +0000
committerbors <bors@rust-lang.org>2016-02-11 09:01:12 +0000
commit060848c31534284ed06cd63c5dbb41e2e839d2b0 (patch)
tree818628c184b1f169074750367a1c308ab2b25dc4
parentb9732ed1471689976fc32fa6757fd29c5a587f5d (diff)
parent456cedcf2337dc0aca1623c9b0ab1391880b527d (diff)
Auto merge of #31507 - dirk:dirk/fix-rustdoc-undeclared-type-ice, r=nrc
Fixes #31451.
-rw-r--r--src/librustdoc/core.rs19
1 files changed, 15 insertions, 4 deletions
diff --git a/src/librustdoc/core.rs b/src/librustdoc/core.rs
index f0bd4dd83cb..6b8f34ac73f 100644
--- a/src/librustdoc/core.rs
+++ b/src/librustdoc/core.rs
@@ -148,13 +148,18 @@ pub fn run_core(search_paths: SearchPaths, cfgs: Vec<String>, externs: Externs,
     let arenas = ty::CtxtArenas::new();
     let hir_map = driver::make_map(&sess, &mut hir_forest);
 
-    abort_on_err(driver::phase_3_run_analysis_passes(&sess,
+    let krate_and_analysis = abort_on_err(driver::phase_3_run_analysis_passes(&sess,
                                                      &cstore,
                                                      hir_map,
                                                      &arenas,
                                                      &name,
                                                      resolve::MakeGlobMap::No,
-                                                     |tcx, _, analysis, _| {
+                                                     |tcx, _, analysis, result| {
+        // Return if the driver hit an err (in `result`)
+        if let Err(_) = result {
+            return None
+        }
+
         let _ignore = tcx.dep_graph.in_ignore();
         let ty::CrateAnalysis { access_levels, .. } = analysis;
 
@@ -195,11 +200,17 @@ pub fn run_core(search_paths: SearchPaths, cfgs: Vec<String>, externs: Externs,
 
         let external_paths = ctxt.external_paths.borrow_mut().take();
         *analysis.external_paths.borrow_mut() = external_paths;
+
         let map = ctxt.external_typarams.borrow_mut().take();
         *analysis.external_typarams.borrow_mut() = map;
+
         let map = ctxt.inlined.borrow_mut().take();
         *analysis.inlined.borrow_mut() = map;
+
         analysis.deref_trait_did = ctxt.deref_trait_did.get();
-        (krate, analysis)
-    }), &sess)
+
+        Some((krate, analysis))
+    }), &sess);
+
+    krate_and_analysis.unwrap()
 }