about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2018-11-21 02:30:35 +0000
committerbors <bors@rust-lang.org>2018-11-21 02:30:35 +0000
commit780658a464603fa755d94b27f72a375bd81d07ea (patch)
tree18787e8fd66be67f6a3dfee5a48bc604f530fdca /src
parentf1e2fa8f0469aac1ea69dd5b6164e1d198d57934 (diff)
parentd4934c748fd9bb74d08d38f240eadf3455777ffb (diff)
downloadrust-780658a464603fa755d94b27f72a375bd81d07ea.tar.gz
rust-780658a464603fa755d94b27f72a375bd81d07ea.zip
Auto merge of #56032 - petrochenkov:stabecip, r=nikomatsakis
Stabilize `extern_crate_item_prelude`

Closes https://github.com/rust-lang/rust/issues/55599
Diffstat (limited to 'src')
-rw-r--r--src/librustc_resolve/lib.rs12
-rw-r--r--src/librustc_resolve/macros.rs5
-rw-r--r--src/librustc_resolve/resolve_imports.rs3
-rw-r--r--src/libsyntax/feature_gate.rs5
-rw-r--r--src/test/ui-fulldeps/proc-macro/extern-prelude-extern-crate-proc-macro.rs2
-rw-r--r--src/test/ui/feature-gates/feature-gate-extern_crate_item_prelude.rs46
-rw-r--r--src/test/ui/feature-gates/feature-gate-extern_crate_item_prelude.stderr75
-rw-r--r--src/test/ui/imports/extern-prelude-extern-crate-absolute-expanded.rs2
-rw-r--r--src/test/ui/imports/extern-prelude-extern-crate-cfg.rs1
-rw-r--r--src/test/ui/imports/extern-prelude-extern-crate-pass.rs2
-rw-r--r--src/test/ui/imports/extern-prelude-extern-crate-restricted-shadowing.rs11
-rw-r--r--src/test/ui/imports/extern-prelude-extern-crate-restricted-shadowing.stderr15
-rw-r--r--src/test/ui/imports/extern-prelude-extern-crate-shadowing.rs12
13 files changed, 40 insertions, 151 deletions
diff --git a/src/librustc_resolve/lib.rs b/src/librustc_resolve/lib.rs
index 7b2d1d4a3d5..4f3a652af91 100644
--- a/src/librustc_resolve/lib.rs
+++ b/src/librustc_resolve/lib.rs
@@ -58,7 +58,6 @@ use syntax::ast::{self, Name, NodeId, Ident, FloatTy, IntTy, UintTy};
 use syntax::ext::base::SyntaxExtension;
 use syntax::ext::base::Determinacy::{self, Determined, Undetermined};
 use syntax::ext::base::MacroKind;
-use syntax::feature_gate::{emit_feature_err, GateIssue};
 use syntax::symbol::{Symbol, keywords};
 use syntax::util::lev_distance::find_best_match_for_name;
 
@@ -2115,7 +2114,7 @@ impl<'a, 'crateloader: 'a> Resolver<'a, 'crateloader> {
 
         if !module.no_implicit_prelude {
             if ns == TypeNS {
-                if let Some(binding) = self.extern_prelude_get(ident, !record_used, false) {
+                if let Some(binding) = self.extern_prelude_get(ident, !record_used) {
                     return Some(LexicalScopeBinding::Item(binding));
                 }
             }
@@ -5022,7 +5021,7 @@ impl<'a, 'crateloader: 'a> Resolver<'a, 'crateloader> {
         self.name_already_seen.insert(name, span);
     }
 
-    fn extern_prelude_get(&mut self, ident: Ident, speculative: bool, skip_feature_gate: bool)
+    fn extern_prelude_get(&mut self, ident: Ident, speculative: bool)
                           -> Option<&'a NameBinding<'a>> {
         if ident.is_path_segment_keyword() {
             // Make sure `self`, `super` etc produce an error when passed to here.
@@ -5030,13 +5029,6 @@ impl<'a, 'crateloader: 'a> Resolver<'a, 'crateloader> {
         }
         self.extern_prelude.get(&ident.modern()).cloned().and_then(|entry| {
             if let Some(binding) = entry.extern_crate_item {
-                if !speculative && !skip_feature_gate && entry.introduced_by_item &&
-                   !self.session.features_untracked().extern_crate_item_prelude {
-                    emit_feature_err(&self.session.parse_sess, "extern_crate_item_prelude",
-                                     ident.span, GateIssue::Language,
-                                     "use of extern prelude names introduced \
-                                      with `extern crate` items is unstable");
-                }
                 Some(binding)
             } else {
                 let crate_id = if !speculative {
diff --git a/src/librustc_resolve/macros.rs b/src/librustc_resolve/macros.rs
index 921f7568b52..581756dc6bf 100644
--- a/src/librustc_resolve/macros.rs
+++ b/src/librustc_resolve/macros.rs
@@ -738,8 +738,7 @@ impl<'a, 'cl> Resolver<'a, 'cl> {
                 }
                 WhereToResolve::ExternPrelude => {
                     if use_prelude {
-                        match self.extern_prelude_get(ident, !record_used,
-                                                      innermost_result.is_some()) {
+                        match self.extern_prelude_get(ident, !record_used) {
                             Some(binding) => Ok((binding, Flags::PRELUDE)),
                             None => Err(Determinacy::determined(
                                 self.graph_root.unresolved_invocations.borrow().is_empty()
@@ -906,7 +905,7 @@ impl<'a, 'cl> Resolver<'a, 'cl> {
                 // but its `Def` should coincide with a crate passed with `--extern`
                 // (otherwise there would be ambiguity) and we can skip feature error in this case.
                 if ns != TypeNS || !use_prelude ||
-                   self.extern_prelude_get(ident, true, false).is_none() {
+                   self.extern_prelude_get(ident, true).is_none() {
                     let msg = "imports can only refer to extern crate names \
                                passed with `--extern` on stable channel";
                     let mut err = feature_err(&self.session.parse_sess, "uniform_paths",
diff --git a/src/librustc_resolve/resolve_imports.rs b/src/librustc_resolve/resolve_imports.rs
index 9e5036b6e50..422ae677d6a 100644
--- a/src/librustc_resolve/resolve_imports.rs
+++ b/src/librustc_resolve/resolve_imports.rs
@@ -166,8 +166,7 @@ impl<'a, 'crateloader> Resolver<'a, 'crateloader> {
                 assert!(!restricted_shadowing);
                 match uniform_root_kind {
                     UniformRootKind::ExternPrelude => {
-                        return if let Some(binding) =
-                                self.extern_prelude_get(ident, !record_used, false) {
+                        return if let Some(binding) = self.extern_prelude_get(ident, !record_used) {
                             Ok(binding)
                         } else if !self.graph_root.unresolved_invocations.borrow().is_empty() {
                             // Macro-expanded `extern crate` items can add names to extern prelude.
diff --git a/src/libsyntax/feature_gate.rs b/src/libsyntax/feature_gate.rs
index a7c97feee49..2f5db9bd081 100644
--- a/src/libsyntax/feature_gate.rs
+++ b/src/libsyntax/feature_gate.rs
@@ -499,9 +499,6 @@ declare_features! (
     // Allows `const _: TYPE = VALUE`
     (active, underscore_const_names, "1.31.0", Some(54912), None),
 
-    // `extern crate foo as bar;` puts `bar` into extern prelude.
-    (active, extern_crate_item_prelude, "1.31.0", Some(55599), None),
-
     // `reason = ` in lint attributes and `expect` lint attribute
     (active, lint_reasons, "1.31.0", Some(54503), None),
 );
@@ -691,6 +688,8 @@ declare_features! (
     // impl<I:Iterator> Iterator for &mut Iterator
     // impl Debug for Foo<'_>
     (accepted, impl_header_lifetime_elision, "1.31.0", Some(15872), None),
+    // `extern crate foo as bar;` puts `bar` into extern prelude.
+    (accepted, extern_crate_item_prelude, "1.31.0", Some(55599), None),
 );
 
 // If you change this, please modify src/doc/unstable-book as well. You must
diff --git a/src/test/ui-fulldeps/proc-macro/extern-prelude-extern-crate-proc-macro.rs b/src/test/ui-fulldeps/proc-macro/extern-prelude-extern-crate-proc-macro.rs
index e320ad97135..25a2a376147 100644
--- a/src/test/ui-fulldeps/proc-macro/extern-prelude-extern-crate-proc-macro.rs
+++ b/src/test/ui-fulldeps/proc-macro/extern-prelude-extern-crate-proc-macro.rs
@@ -1,8 +1,6 @@
 // compile-pass
 // edition:2018
 
-#![feature(extern_crate_item_prelude)]
-
 extern crate proc_macro;
 use proc_macro::TokenStream; // OK
 
diff --git a/src/test/ui/feature-gates/feature-gate-extern_crate_item_prelude.rs b/src/test/ui/feature-gates/feature-gate-extern_crate_item_prelude.rs
deleted file mode 100644
index 27b9a34ff4e..00000000000
--- a/src/test/ui/feature-gates/feature-gate-extern_crate_item_prelude.rs
+++ /dev/null
@@ -1,46 +0,0 @@
-// edition:2018
-
-#![feature(alloc, underscore_imports)]
-
-extern crate alloc;
-
-mod in_scope {
-    fn check() {
-        let v = alloc::vec![0];
-        //~^ ERROR use of extern prelude names introduced with `extern crate` items is unstable
-        type A = alloc::boxed::Box<u8>;
-        //~^ ERROR use of extern prelude names introduced with `extern crate` items is unstable
-    }
-}
-
-mod absolute {
-    fn check() {
-        let v = ::alloc::vec![0];
-        //~^ ERROR use of extern prelude names introduced with `extern crate` items is unstable
-        type A = ::alloc::boxed::Box<u8>;
-        //~^ ERROR use of extern prelude names introduced with `extern crate` items is unstable
-    }
-}
-
-mod import_in_scope {
-    use alloc as _;
-    //~^ ERROR use of extern prelude names introduced with `extern crate` items is unstable
-    use alloc::boxed;
-    //~^ ERROR use of extern prelude names introduced with `extern crate` items is unstable
-}
-
-mod import_absolute {
-    use ::alloc;
-    //~^ ERROR use of extern prelude names introduced with `extern crate` items is unstable
-    use ::alloc::boxed;
-    //~^ ERROR use of extern prelude names introduced with `extern crate` items is unstable
-}
-
-extern crate alloc as core;
-
-mod unrelated_crate_renamed {
-    type A = core::boxed::Box<u8>;
-    //~^ ERROR use of extern prelude names introduced with `extern crate` items is unstable
-}
-
-fn main() {}
diff --git a/src/test/ui/feature-gates/feature-gate-extern_crate_item_prelude.stderr b/src/test/ui/feature-gates/feature-gate-extern_crate_item_prelude.stderr
deleted file mode 100644
index 103ab79ef84..00000000000
--- a/src/test/ui/feature-gates/feature-gate-extern_crate_item_prelude.stderr
+++ /dev/null
@@ -1,75 +0,0 @@
-error[E0658]: use of extern prelude names introduced with `extern crate` items is unstable (see issue #55599)
-  --> $DIR/feature-gate-extern_crate_item_prelude.rs:26:9
-   |
-LL |     use alloc as _;
-   |         ^^^^^
-   |
-   = help: add #![feature(extern_crate_item_prelude)] to the crate attributes to enable
-
-error[E0658]: use of extern prelude names introduced with `extern crate` items is unstable (see issue #55599)
-  --> $DIR/feature-gate-extern_crate_item_prelude.rs:28:9
-   |
-LL |     use alloc::boxed;
-   |         ^^^^^
-   |
-   = help: add #![feature(extern_crate_item_prelude)] to the crate attributes to enable
-
-error[E0658]: use of extern prelude names introduced with `extern crate` items is unstable (see issue #55599)
-  --> $DIR/feature-gate-extern_crate_item_prelude.rs:33:11
-   |
-LL |     use ::alloc;
-   |           ^^^^^
-   |
-   = help: add #![feature(extern_crate_item_prelude)] to the crate attributes to enable
-
-error[E0658]: use of extern prelude names introduced with `extern crate` items is unstable (see issue #55599)
-  --> $DIR/feature-gate-extern_crate_item_prelude.rs:35:11
-   |
-LL |     use ::alloc::boxed;
-   |           ^^^^^
-   |
-   = help: add #![feature(extern_crate_item_prelude)] to the crate attributes to enable
-
-error[E0658]: use of extern prelude names introduced with `extern crate` items is unstable (see issue #55599)
-  --> $DIR/feature-gate-extern_crate_item_prelude.rs:9:17
-   |
-LL |         let v = alloc::vec![0];
-   |                 ^^^^^
-   |
-   = help: add #![feature(extern_crate_item_prelude)] to the crate attributes to enable
-
-error[E0658]: use of extern prelude names introduced with `extern crate` items is unstable (see issue #55599)
-  --> $DIR/feature-gate-extern_crate_item_prelude.rs:11:18
-   |
-LL |         type A = alloc::boxed::Box<u8>;
-   |                  ^^^^^
-   |
-   = help: add #![feature(extern_crate_item_prelude)] to the crate attributes to enable
-
-error[E0658]: use of extern prelude names introduced with `extern crate` items is unstable (see issue #55599)
-  --> $DIR/feature-gate-extern_crate_item_prelude.rs:18:19
-   |
-LL |         let v = ::alloc::vec![0];
-   |                   ^^^^^
-   |
-   = help: add #![feature(extern_crate_item_prelude)] to the crate attributes to enable
-
-error[E0658]: use of extern prelude names introduced with `extern crate` items is unstable (see issue #55599)
-  --> $DIR/feature-gate-extern_crate_item_prelude.rs:20:20
-   |
-LL |         type A = ::alloc::boxed::Box<u8>;
-   |                    ^^^^^
-   |
-   = help: add #![feature(extern_crate_item_prelude)] to the crate attributes to enable
-
-error[E0658]: use of extern prelude names introduced with `extern crate` items is unstable (see issue #55599)
-  --> $DIR/feature-gate-extern_crate_item_prelude.rs:42:14
-   |
-LL |     type A = core::boxed::Box<u8>;
-   |              ^^^^
-   |
-   = help: add #![feature(extern_crate_item_prelude)] to the crate attributes to enable
-
-error: aborting due to 9 previous errors
-
-For more information about this error, try `rustc --explain E0658`.
diff --git a/src/test/ui/imports/extern-prelude-extern-crate-absolute-expanded.rs b/src/test/ui/imports/extern-prelude-extern-crate-absolute-expanded.rs
index b1154f2076b..cf91a9714ad 100644
--- a/src/test/ui/imports/extern-prelude-extern-crate-absolute-expanded.rs
+++ b/src/test/ui/imports/extern-prelude-extern-crate-absolute-expanded.rs
@@ -1,8 +1,6 @@
 // compile-pass
 // edition:2018
 
-#![feature(extern_crate_item_prelude)]
-
 macro_rules! define_iso { () => {
     extern crate std as iso;
 }}
diff --git a/src/test/ui/imports/extern-prelude-extern-crate-cfg.rs b/src/test/ui/imports/extern-prelude-extern-crate-cfg.rs
index c48a65798b6..6117e5f6f3c 100644
--- a/src/test/ui/imports/extern-prelude-extern-crate-cfg.rs
+++ b/src/test/ui/imports/extern-prelude-extern-crate-cfg.rs
@@ -1,7 +1,6 @@
 // compile-pass
 // compile-flags:--cfg my_feature
 
-#![feature(extern_crate_item_prelude)]
 #![no_std]
 
 #[cfg(my_feature)]
diff --git a/src/test/ui/imports/extern-prelude-extern-crate-pass.rs b/src/test/ui/imports/extern-prelude-extern-crate-pass.rs
index 8c147dfd04a..bb4cf6ca99c 100644
--- a/src/test/ui/imports/extern-prelude-extern-crate-pass.rs
+++ b/src/test/ui/imports/extern-prelude-extern-crate-pass.rs
@@ -1,8 +1,6 @@
 // compile-pass
 // aux-build:two_macros.rs
 
-#![feature(extern_crate_item_prelude)]
-
 extern crate two_macros;
 
 mod m {
diff --git a/src/test/ui/imports/extern-prelude-extern-crate-restricted-shadowing.rs b/src/test/ui/imports/extern-prelude-extern-crate-restricted-shadowing.rs
index 732f1c4de2f..6ff3ab73639 100644
--- a/src/test/ui/imports/extern-prelude-extern-crate-restricted-shadowing.rs
+++ b/src/test/ui/imports/extern-prelude-extern-crate-restricted-shadowing.rs
@@ -1,7 +1,5 @@
 // aux-build:two_macros.rs
 
-#![feature(extern_crate_item_prelude)]
-
 macro_rules! define_vec {
     () => {
         extern crate std as Vec;
@@ -16,4 +14,13 @@ mod m {
     }
 }
 
+macro_rules! define_other_core {
+    () => {
+        extern crate std as core;
+        //~^ ERROR macro-expanded `extern crate` items cannot shadow names passed with `--extern`
+    }
+}
+
+define_other_core!();
+
 fn main() {}
diff --git a/src/test/ui/imports/extern-prelude-extern-crate-restricted-shadowing.stderr b/src/test/ui/imports/extern-prelude-extern-crate-restricted-shadowing.stderr
index 218dfb796f7..795e1761ccd 100644
--- a/src/test/ui/imports/extern-prelude-extern-crate-restricted-shadowing.stderr
+++ b/src/test/ui/imports/extern-prelude-extern-crate-restricted-shadowing.stderr
@@ -1,12 +1,21 @@
+error: macro-expanded `extern crate` items cannot shadow names passed with `--extern`
+  --> $DIR/extern-prelude-extern-crate-restricted-shadowing.rs:19:9
+   |
+LL |         extern crate std as core;
+   |         ^^^^^^^^^^^^^^^^^^^^^^^^^
+...
+LL | define_other_core!();
+   | --------------------- in this macro invocation
+
 error[E0659]: `Vec` is ambiguous (macro-expanded name vs less macro-expanded name from outer scope during import/macro resolution)
-  --> $DIR/extern-prelude-extern-crate-restricted-shadowing.rs:15:9
+  --> $DIR/extern-prelude-extern-crate-restricted-shadowing.rs:13:9
    |
 LL |         Vec::panic!(); //~ ERROR `Vec` is ambiguous
    |         ^^^ ambiguous name
    |
    = note: `Vec` could refer to a struct from prelude
 note: `Vec` could also refer to the extern crate imported here
-  --> $DIR/extern-prelude-extern-crate-restricted-shadowing.rs:7:9
+  --> $DIR/extern-prelude-extern-crate-restricted-shadowing.rs:5:9
    |
 LL |         extern crate std as Vec;
    |         ^^^^^^^^^^^^^^^^^^^^^^^^
@@ -14,6 +23,6 @@ LL |         extern crate std as Vec;
 LL | define_vec!();
    | -------------- in this macro invocation
 
-error: aborting due to previous error
+error: aborting due to 2 previous errors
 
 For more information about this error, try `rustc --explain E0659`.
diff --git a/src/test/ui/imports/extern-prelude-extern-crate-shadowing.rs b/src/test/ui/imports/extern-prelude-extern-crate-shadowing.rs
new file mode 100644
index 00000000000..c5adeaf17fa
--- /dev/null
+++ b/src/test/ui/imports/extern-prelude-extern-crate-shadowing.rs
@@ -0,0 +1,12 @@
+// compile-pass
+// aux-build:two_macros.rs
+
+extern crate two_macros as core;
+
+mod m {
+    fn check() {
+        core::m!(); // OK
+    }
+}
+
+fn main() {}