about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2018-06-11 22:23:08 +0000
committerbors <bors@rust-lang.org>2018-06-11 22:23:08 +0000
commitf9944fde377b8b2575f96fff60f784eddce54002 (patch)
tree3604ecb79a1d51d8fba2b15558619c75628e084b /src
parent1d4dbf488a4364413e7b9611866b7a5c75ce566f (diff)
parentdadfa13f47809e1d4a1b896db727996c1519036f (diff)
downloadrust-f9944fde377b8b2575f96fff60f784eddce54002.tar.gz
rust-f9944fde377b8b2575f96fff60f784eddce54002.zip
Auto merge of #50617 - GuillaumeGomez:fix-extern-prelude, r=QuietMisdreavus
Fix extern prelude failure in rustdoc

Fixes #50561.

r? @QuietMisdreavus
Diffstat (limited to 'src')
-rw-r--r--src/librustc/session/config.rs7
-rw-r--r--src/librustc_resolve/lib.rs7
-rw-r--r--src/librustdoc/clean/mod.rs2
-rw-r--r--src/librustdoc/core.rs4
4 files changed, 17 insertions, 3 deletions
diff --git a/src/librustc/session/config.rs b/src/librustc/session/config.rs
index 2c8f021c6a5..f831b006642 100644
--- a/src/librustc/session/config.rs
+++ b/src/librustc/session/config.rs
@@ -494,6 +494,13 @@ impl Input {
             Input::Str { .. } => "rust_out".to_string(),
         }
     }
+
+    pub fn get_input(&mut self) -> Option<&mut String> {
+        match *self {
+            Input::File(_) => None,
+            Input::Str { ref mut input, .. } => Some(input),
+        }
+    }
 }
 
 #[derive(Clone)]
diff --git a/src/librustc_resolve/lib.rs b/src/librustc_resolve/lib.rs
index 7bb7f2fffbc..8ff250dfa5c 100644
--- a/src/librustc_resolve/lib.rs
+++ b/src/librustc_resolve/lib.rs
@@ -1437,6 +1437,9 @@ pub struct Resolver<'a> {
     current_type_ascription: Vec<Span>,
 
     injected_crate: Option<Module<'a>>,
+
+    /// Only supposed to be used by rustdoc, otherwise should be false.
+    pub ignore_extern_prelude_feature: bool,
 }
 
 /// Nothing really interesting here, it just provides memory for the rest of the crate.
@@ -1718,6 +1721,7 @@ impl<'a> Resolver<'a> {
             unused_macros: FxHashSet(),
             current_type_ascription: Vec::new(),
             injected_crate: None,
+            ignore_extern_prelude_feature: false,
         }
     }
 
@@ -1891,7 +1895,8 @@ impl<'a> Resolver<'a> {
         if !module.no_implicit_prelude {
             // `record_used` means that we don't try to load crates during speculative resolution
             if record_used && ns == TypeNS && self.extern_prelude.contains(&ident.name) {
-                if !self.session.features_untracked().extern_prelude {
+                if !self.session.features_untracked().extern_prelude &&
+                   !self.ignore_extern_prelude_feature {
                     feature_err(&self.session.parse_sess, "extern_prelude",
                                 ident.span, GateIssue::Language,
                                 "access to extern crates through prelude is experimental").emit();
diff --git a/src/librustdoc/clean/mod.rs b/src/librustdoc/clean/mod.rs
index 3f883eab172..54647b45159 100644
--- a/src/librustdoc/clean/mod.rs
+++ b/src/librustdoc/clean/mod.rs
@@ -1103,7 +1103,7 @@ fn resolve(cx: &DocContext, path_str: &str, is_val: bool) -> Result<(Def, Option
             // early return and try looking for the trait
             let value = match result.def {
                 Def::Method(_) | Def::AssociatedConst(_) => true,
-                Def::AssociatedTy(_)  => false,
+                Def::AssociatedTy(_) => false,
                 Def::Variant(_) => return handle_variant(cx, result.def),
                 // not a trait item, just return what we found
                 _ => return Ok((result.def, None))
diff --git a/src/librustdoc/core.rs b/src/librustdoc/core.rs
index bad5ff2596f..9b5e1074cfa 100644
--- a/src/librustdoc/core.rs
+++ b/src/librustdoc/core.rs
@@ -250,10 +250,12 @@ pub fn run_core(search_paths: SearchPaths,
                                                         |_| Ok(()));
         let driver::InnerExpansionResult {
             mut hir_forest,
-            resolver,
+            mut resolver,
             ..
         } = abort_on_err(result, &sess);
 
+        resolver.ignore_extern_prelude_feature = true;
+
         // We need to hold on to the complete resolver, so we clone everything
         // for the analysis passes to use. Suboptimal, but necessary in the
         // current architecture.