diff --git a/src/libproc_macro/lib.rs b/src/libproc_macro/lib.rs
index 5ee9fecfb21b3..1491bdc6c8d31 100644
--- a/src/libproc_macro/lib.rs
+++ b/src/libproc_macro/lib.rs
@@ -15,8 +15,7 @@
//! Currently the primary use of this crate is to provide the ability to define
//! new custom derive modes through `#[proc_macro_derive]`.
//!
-//! Added recently as part of [RFC 1681] this crate is currently *unstable* and
-//! requires the `#![feature(proc_macro_lib)]` directive to use.
+//! Added recently as part of [RFC 1681] this crate is stable as of Rust 1.15.0.
//!
//! [RFC 1681]: https://github.com/rust-lang/rfcs/blob/master/text/1681-macros-1.1.md
//!
@@ -27,7 +26,7 @@
//! area for macro authors is stabilized.
#![crate_name = "proc_macro"]
-#![unstable(feature = "proc_macro_lib", issue = "27812")]
+#![stable(feature = "proc_macro_lib", since = "1.15.0")]
#![crate_type = "rlib"]
#![crate_type = "dylib"]
#![cfg_attr(not(stage0), deny(warnings))]
@@ -55,12 +54,14 @@ use syntax::ptr::P;
///
/// The API of this type is intentionally bare-bones, but it'll be expanded over
/// time!
+#[stable(feature = "proc_macro_lib", since = "1.15.0")]
pub struct TokenStream {
inner: Vec
>,
}
/// Error returned from `TokenStream::from_str`.
#[derive(Debug)]
+#[stable(feature = "proc_macro_lib", since = "1.15.0")]
pub struct LexError {
_inner: (),
}
@@ -131,6 +132,7 @@ pub mod __internal {
}
}
+#[stable(feature = "proc_macro_lib", since = "1.15.0")]
impl FromStr for TokenStream {
type Err = LexError;
@@ -154,6 +156,7 @@ impl FromStr for TokenStream {
}
}
+#[stable(feature = "proc_macro_lib", since = "1.15.0")]
impl fmt::Display for TokenStream {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
for item in self.inner.iter() {
diff --git a/src/librustc_driver/driver.rs b/src/librustc_driver/driver.rs
index e9c14b4f99c22..63abc09a07672 100644
--- a/src/librustc_driver/driver.rs
+++ b/src/librustc_driver/driver.rs
@@ -716,8 +716,7 @@ pub fn phase_2_configure_and_expand(sess: &Session,
is_proc_macro_crate,
is_test_crate,
num_crate_types,
- sess.diagnostic(),
- &sess.features.borrow())
+ sess.diagnostic())
});
}
diff --git a/src/librustc_metadata/lib.rs b/src/librustc_metadata/lib.rs
index f4ccc01544aa6..3986cc507d4be 100644
--- a/src/librustc_metadata/lib.rs
+++ b/src/librustc_metadata/lib.rs
@@ -21,7 +21,6 @@
#![feature(conservative_impl_trait)]
#![feature(core_intrinsics)]
#![feature(proc_macro_internals)]
-#![feature(proc_macro_lib)]
#![feature(quote)]
#![feature(rustc_diagnostic_macros)]
#![feature(rustc_private)]
diff --git a/src/libsyntax/ext/expand.rs b/src/libsyntax/ext/expand.rs
index 5d62175fbf23a..d45dbd3f72342 100644
--- a/src/libsyntax/ext/expand.rs
+++ b/src/libsyntax/ext/expand.rs
@@ -926,7 +926,6 @@ impl<'feat> ExpansionConfig<'feat> {
fn enable_allow_internal_unstable = allow_internal_unstable,
fn enable_custom_derive = custom_derive,
fn enable_pushpop_unsafe = pushpop_unsafe,
- fn enable_proc_macro = proc_macro,
}
}
diff --git a/src/libsyntax/feature_gate.rs b/src/libsyntax/feature_gate.rs
index e7df454cf6a50..5092412475872 100644
--- a/src/libsyntax/feature_gate.rs
+++ b/src/libsyntax/feature_gate.rs
@@ -279,9 +279,6 @@ declare_features! (
// instead of just the platforms on which it is the C ABI
(active, abi_sysv64, "1.13.0", Some(36167)),
- // Macros 1.1
- (active, proc_macro, "1.13.0", Some(35900)),
-
// Allows untagged unions `union U { ... }`
(active, untagged_unions, "1.13.0", Some(32836)),
@@ -377,6 +374,8 @@ declare_features! (
// Allows `..` in tuple (struct) patterns
(accepted, dotdot_in_tuple_patterns, "1.14.0", Some(33627)),
(accepted, item_like_imports, "1.14.0", Some(35120)),
+ // Macros 1.1
+ (accepted, proc_macro, "1.15.0", Some(35900)),
);
// (changing above list without updating src/doc/reference.md makes @cmr sad)
@@ -650,11 +649,7 @@ pub const BUILTIN_ATTRIBUTES: &'static [(&'static str, AttributeType, AttributeG
is an experimental feature",
cfg_fn!(fundamental))),
- ("proc_macro_derive", Normal, Gated(Stability::Unstable,
- "proc_macro",
- "the `#[proc_macro_derive]` attribute \
- is an experimental feature",
- cfg_fn!(proc_macro))),
+ ("proc_macro_derive", Normal, Ungated),
("rustc_copy_clone_marker", Whitelisted, Gated(Stability::Unstable,
"rustc_attrs",
@@ -760,7 +755,6 @@ const GATED_CFGS: &'static [(&'static str, &'static str, fn(&Features) -> bool)]
("target_vendor", "cfg_target_vendor", cfg_fn!(cfg_target_vendor)),
("target_thread_local", "cfg_target_thread_local", cfg_fn!(cfg_target_thread_local)),
("target_has_atomic", "cfg_target_has_atomic", cfg_fn!(cfg_target_has_atomic)),
- ("proc_macro", "proc_macro", cfg_fn!(proc_macro)),
];
#[derive(Debug, Eq, PartialEq)]
diff --git a/src/libsyntax_ext/deriving/mod.rs b/src/libsyntax_ext/deriving/mod.rs
index 0511b0d252b60..2573690d15375 100644
--- a/src/libsyntax_ext/deriving/mod.rs
+++ b/src/libsyntax_ext/deriving/mod.rs
@@ -15,7 +15,7 @@ use syntax::attr::HasAttrs;
use syntax::codemap;
use syntax::ext::base::{Annotatable, ExtCtxt, SyntaxExtension};
use syntax::ext::build::AstBuilder;
-use syntax::feature_gate::{self, emit_feature_err};
+use syntax::feature_gate;
use syntax::ptr::P;
use syntax::symbol::Symbol;
use syntax_pos::Span;
@@ -220,12 +220,6 @@ pub fn expand_derive(cx: &mut ExtCtxt,
.filter(|&(_, ref name)| !is_builtin_trait(name.name().unwrap()))
.next();
if let Some((i, titem)) = macros_11_derive {
- if !cx.ecfg.features.unwrap().proc_macro {
- let issue = feature_gate::GateIssue::Language;
- let msg = "custom derive macros are experimentally supported";
- emit_feature_err(cx.parse_sess, "proc_macro", titem.span, issue, msg);
- }
-
let tname = ast::Ident::with_empty_ctxt(titem.name().unwrap());
let path = ast::Path::from_ident(titem.span, tname);
let ext = cx.resolver.resolve_macro(cx.current_expansion.mark, &path, false).unwrap();
diff --git a/src/libsyntax_ext/lib.rs b/src/libsyntax_ext/lib.rs
index e31b29d5cc1b4..cbc2b2263f20e 100644
--- a/src/libsyntax_ext/lib.rs
+++ b/src/libsyntax_ext/lib.rs
@@ -19,7 +19,6 @@
html_root_url = "https://doc.rust-lang.org/nightly/")]
#![cfg_attr(not(stage0), deny(warnings))]
-#![feature(proc_macro_lib)]
#![feature(proc_macro_internals)]
#![feature(rustc_private)]
#![feature(staged_api)]
diff --git a/src/libsyntax_ext/proc_macro_registrar.rs b/src/libsyntax_ext/proc_macro_registrar.rs
index 5323ace79d849..c93e2c054d240 100644
--- a/src/libsyntax_ext/proc_macro_registrar.rs
+++ b/src/libsyntax_ext/proc_macro_registrar.rs
@@ -17,7 +17,6 @@ use syntax::ext::base::ExtCtxt;
use syntax::ext::build::AstBuilder;
use syntax::ext::expand::ExpansionConfig;
use syntax::parse::ParseSess;
-use syntax::feature_gate::Features;
use syntax::fold::Folder;
use syntax::ptr::P;
use syntax::symbol::Symbol;
@@ -47,8 +46,7 @@ pub fn modify(sess: &ParseSess,
is_proc_macro_crate: bool,
is_test_crate: bool,
num_crate_types: usize,
- handler: &errors::Handler,
- features: &Features) -> ast::Crate {
+ handler: &errors::Handler) -> ast::Crate {
let ecfg = ExpansionConfig::default("proc_macro".to_string());
let mut cx = ExtCtxt::new(sess, ecfg, resolver);
@@ -66,12 +64,6 @@ pub fn modify(sess: &ParseSess,
if !is_proc_macro_crate {
return krate
- } else if !features.proc_macro {
- let mut err = handler.struct_err("the `proc-macro` crate type is \
- experimental");
- err.help("add #![feature(proc_macro)] to the crate attributes to \
- enable");
- err.emit();
}
if num_crate_types > 1 {
diff --git a/src/test/compile-fail-fulldeps/proc-macro/attribute.rs b/src/test/compile-fail-fulldeps/proc-macro/attribute.rs
index abf11637631f4..5d5e61270b61d 100644
--- a/src/test/compile-fail-fulldeps/proc-macro/attribute.rs
+++ b/src/test/compile-fail-fulldeps/proc-macro/attribute.rs
@@ -9,7 +9,6 @@
// except according to those terms.
#![crate_type = "proc-macro"]
-#![feature(proc_macro, proc_macro_lib)]
extern crate proc_macro;
diff --git a/src/test/compile-fail-fulldeps/proc-macro/auxiliary/derive-a-b.rs b/src/test/compile-fail-fulldeps/proc-macro/auxiliary/derive-a-b.rs
index 8a92ca74f376a..cd8750bc89c42 100644
--- a/src/test/compile-fail-fulldeps/proc-macro/auxiliary/derive-a-b.rs
+++ b/src/test/compile-fail-fulldeps/proc-macro/auxiliary/derive-a-b.rs
@@ -11,7 +11,6 @@
// force-host
// no-prefer-dynamic
-#![feature(proc_macro, proc_macro_lib)]
#![crate_type = "proc-macro"]
extern crate proc_macro;
diff --git a/src/test/compile-fail-fulldeps/proc-macro/auxiliary/derive-a.rs b/src/test/compile-fail-fulldeps/proc-macro/auxiliary/derive-a.rs
index 8d26207273d42..53b2c23e5d7df 100644
--- a/src/test/compile-fail-fulldeps/proc-macro/auxiliary/derive-a.rs
+++ b/src/test/compile-fail-fulldeps/proc-macro/auxiliary/derive-a.rs
@@ -11,8 +11,6 @@
// force-host
// no-prefer-dynamic
-#![feature(proc_macro)]
-#![feature(proc_macro_lib)]
#![crate_type = "proc-macro"]
extern crate proc_macro;
diff --git a/src/test/compile-fail-fulldeps/proc-macro/auxiliary/derive-b.rs b/src/test/compile-fail-fulldeps/proc-macro/auxiliary/derive-b.rs
index 70b778b1030e7..5787546fb1e5a 100644
--- a/src/test/compile-fail-fulldeps/proc-macro/auxiliary/derive-b.rs
+++ b/src/test/compile-fail-fulldeps/proc-macro/auxiliary/derive-b.rs
@@ -11,8 +11,6 @@
// force-host
// no-prefer-dynamic
-#![feature(proc_macro)]
-#![feature(proc_macro_lib)]
#![crate_type = "proc-macro"]
extern crate proc_macro;
diff --git a/src/test/compile-fail-fulldeps/proc-macro/auxiliary/derive-bad.rs b/src/test/compile-fail-fulldeps/proc-macro/auxiliary/derive-bad.rs
index aae8b63e25354..841b39eaed07b 100644
--- a/src/test/compile-fail-fulldeps/proc-macro/auxiliary/derive-bad.rs
+++ b/src/test/compile-fail-fulldeps/proc-macro/auxiliary/derive-bad.rs
@@ -11,8 +11,6 @@
// no-prefer-dynamic
// force-host
-#![feature(proc_macro)]
-#![feature(proc_macro_lib)]
#![crate_type = "proc-macro"]
extern crate proc_macro;
diff --git a/src/test/compile-fail-fulldeps/proc-macro/auxiliary/derive-panic.rs b/src/test/compile-fail-fulldeps/proc-macro/auxiliary/derive-panic.rs
index f426fe5437671..3274f0324e1cb 100644
--- a/src/test/compile-fail-fulldeps/proc-macro/auxiliary/derive-panic.rs
+++ b/src/test/compile-fail-fulldeps/proc-macro/auxiliary/derive-panic.rs
@@ -11,8 +11,6 @@
// no-prefer-dynamic
// force-host
-#![feature(proc_macro)]
-#![feature(proc_macro_lib)]
#![crate_type = "proc-macro"]
extern crate proc_macro;
diff --git a/src/test/compile-fail-fulldeps/proc-macro/auxiliary/derive-unstable-2.rs b/src/test/compile-fail-fulldeps/proc-macro/auxiliary/derive-unstable-2.rs
index d8952e3478b6c..2d492d341ebba 100644
--- a/src/test/compile-fail-fulldeps/proc-macro/auxiliary/derive-unstable-2.rs
+++ b/src/test/compile-fail-fulldeps/proc-macro/auxiliary/derive-unstable-2.rs
@@ -11,8 +11,6 @@
// force-host
// no-prefer-dynamic
-#![feature(proc_macro)]
-#![feature(proc_macro_lib)]
#![crate_type = "proc-macro"]
extern crate proc_macro;
diff --git a/src/test/compile-fail-fulldeps/proc-macro/auxiliary/derive-unstable.rs b/src/test/compile-fail-fulldeps/proc-macro/auxiliary/derive-unstable.rs
index 1187b5102e23f..a7b5d1e3e54cf 100644
--- a/src/test/compile-fail-fulldeps/proc-macro/auxiliary/derive-unstable.rs
+++ b/src/test/compile-fail-fulldeps/proc-macro/auxiliary/derive-unstable.rs
@@ -11,8 +11,6 @@
// force-host
// no-prefer-dynamic
-#![feature(proc_macro)]
-#![feature(proc_macro_lib)]
#![crate_type = "proc-macro"]
extern crate proc_macro;
diff --git a/src/test/compile-fail-fulldeps/proc-macro/define-two.rs b/src/test/compile-fail-fulldeps/proc-macro/define-two.rs
index bdb3c09c4d723..87b32096d7b01 100644
--- a/src/test/compile-fail-fulldeps/proc-macro/define-two.rs
+++ b/src/test/compile-fail-fulldeps/proc-macro/define-two.rs
@@ -11,7 +11,6 @@
// no-prefer-dynamic
#![crate_type = "proc-macro"]
-#![feature(proc_macro, proc_macro_lib)]
extern crate proc_macro;
diff --git a/src/test/compile-fail-fulldeps/proc-macro/derive-bad.rs b/src/test/compile-fail-fulldeps/proc-macro/derive-bad.rs
index 4cc6b9f984c94..0e4ac9fe1eaf5 100644
--- a/src/test/compile-fail-fulldeps/proc-macro/derive-bad.rs
+++ b/src/test/compile-fail-fulldeps/proc-macro/derive-bad.rs
@@ -10,8 +10,6 @@
// aux-build:derive-bad.rs
-#![feature(proc_macro)]
-
#[macro_use]
extern crate derive_bad;
diff --git a/src/test/compile-fail-fulldeps/proc-macro/derive-still-gated.rs b/src/test/compile-fail-fulldeps/proc-macro/derive-still-gated.rs
index eb0bb00be9175..f36236c53562d 100644
--- a/src/test/compile-fail-fulldeps/proc-macro/derive-still-gated.rs
+++ b/src/test/compile-fail-fulldeps/proc-macro/derive-still-gated.rs
@@ -10,7 +10,6 @@
// aux-build:derive-a.rs
-#![feature(proc_macro)]
#![allow(warnings)]
#[macro_use]
diff --git a/src/test/compile-fail-fulldeps/proc-macro/expand-to-unstable-2.rs b/src/test/compile-fail-fulldeps/proc-macro/expand-to-unstable-2.rs
index 4f4ed90f8fca2..e4fcbb117a505 100644
--- a/src/test/compile-fail-fulldeps/proc-macro/expand-to-unstable-2.rs
+++ b/src/test/compile-fail-fulldeps/proc-macro/expand-to-unstable-2.rs
@@ -10,7 +10,6 @@
// aux-build:derive-unstable-2.rs
-#![feature(proc_macro)]
#![allow(warnings)]
#[macro_use]
diff --git a/src/test/compile-fail-fulldeps/proc-macro/expand-to-unstable.rs b/src/test/compile-fail-fulldeps/proc-macro/expand-to-unstable.rs
index 84ac776a765a2..836e336fc22f0 100644
--- a/src/test/compile-fail-fulldeps/proc-macro/expand-to-unstable.rs
+++ b/src/test/compile-fail-fulldeps/proc-macro/expand-to-unstable.rs
@@ -10,7 +10,6 @@
// aux-build:derive-unstable.rs
-#![feature(proc_macro)]
#![allow(warnings)]
#[macro_use]
diff --git a/src/test/compile-fail-fulldeps/proc-macro/export-macro.rs b/src/test/compile-fail-fulldeps/proc-macro/export-macro.rs
index 48b73e7333185..477039bd7a2fa 100644
--- a/src/test/compile-fail-fulldeps/proc-macro/export-macro.rs
+++ b/src/test/compile-fail-fulldeps/proc-macro/export-macro.rs
@@ -11,7 +11,6 @@
// error-pattern: cannot export macro_rules! macros from a `proc-macro` crate
#![crate_type = "proc-macro"]
-#![feature(proc_macro)]
#[macro_export]
macro_rules! foo {
diff --git a/src/test/compile-fail-fulldeps/proc-macro/feature-gate-1.rs b/src/test/compile-fail-fulldeps/proc-macro/feature-gate-1.rs
deleted file mode 100644
index f5618fc6425e2..0000000000000
--- a/src/test/compile-fail-fulldeps/proc-macro/feature-gate-1.rs
+++ /dev/null
@@ -1,13 +0,0 @@
-// Copyright 2016 The Rust Project Developers. See the COPYRIGHT
-// file at the top-level directory of this distribution and at
-// http://rust-lang.org/COPYRIGHT.
-//
-// Licensed under the Apache License, Version 2.0 or the MIT license
-// , at your
-// option. This file may not be copied, modified, or distributed
-// except according to those terms.
-
-// error-pattern: the `proc-macro` crate type is experimental
-
-#![crate_type = "proc-macro"]
diff --git a/src/test/compile-fail-fulldeps/proc-macro/feature-gate-2.rs b/src/test/compile-fail-fulldeps/proc-macro/feature-gate-2.rs
deleted file mode 100644
index 9c4053266f471..0000000000000
--- a/src/test/compile-fail-fulldeps/proc-macro/feature-gate-2.rs
+++ /dev/null
@@ -1,13 +0,0 @@
-// Copyright 2016 The Rust Project Developers. See the COPYRIGHT
-// file at the top-level directory of this distribution and at
-// http://rust-lang.org/COPYRIGHT.
-//
-// Licensed under the Apache License, Version 2.0 or the MIT license
-// , at your
-// option. This file may not be copied, modified, or distributed
-// except according to those terms.
-
-extern crate proc_macro; //~ ERROR: use of unstable library feature
-
-fn main() {}
diff --git a/src/test/compile-fail-fulldeps/proc-macro/feature-gate-3.rs b/src/test/compile-fail-fulldeps/proc-macro/feature-gate-3.rs
deleted file mode 100644
index bb6b575962250..0000000000000
--- a/src/test/compile-fail-fulldeps/proc-macro/feature-gate-3.rs
+++ /dev/null
@@ -1,15 +0,0 @@
-// Copyright 2016 The Rust Project Developers. See the COPYRIGHT
-// file at the top-level directory of this distribution and at
-// http://rust-lang.org/COPYRIGHT.
-//
-// Licensed under the Apache License, Version 2.0 or the MIT license
-// , at your
-// option. This file may not be copied, modified, or distributed
-// except according to those terms.
-
-#![crate_type = "proc-macro"]
-
-#[proc_macro_derive(Foo)] //~ ERROR: is an experimental feature
-pub fn foo() {
-}
diff --git a/src/test/compile-fail-fulldeps/proc-macro/feature-gate-4.rs b/src/test/compile-fail-fulldeps/proc-macro/feature-gate-4.rs
deleted file mode 100644
index 6a8fcdf4ab782..0000000000000
--- a/src/test/compile-fail-fulldeps/proc-macro/feature-gate-4.rs
+++ /dev/null
@@ -1,17 +0,0 @@
-// Copyright 2016 The Rust Project Developers. See the COPYRIGHT
-// file at the top-level directory of this distribution and at
-// http://rust-lang.org/COPYRIGHT.
-//
-// Licensed under the Apache License, Version 2.0 or the MIT license
-// , at your
-// option. This file may not be copied, modified, or distributed
-// except according to those terms.
-
-// aux-build:derive-a.rs
-
-#[macro_use]
-extern crate derive_a;
-
-#[derive(A)] //~ ERROR custom derive macros are experimentally supported
-struct S;
diff --git a/src/test/compile-fail-fulldeps/proc-macro/feature-gate-5.rs b/src/test/compile-fail-fulldeps/proc-macro/feature-gate-5.rs
deleted file mode 100644
index 672579ce8f14b..0000000000000
--- a/src/test/compile-fail-fulldeps/proc-macro/feature-gate-5.rs
+++ /dev/null
@@ -1,12 +0,0 @@
-// Copyright 2016 The Rust Project Developers. See the COPYRIGHT
-// file at the top-level directory of this distribution and at
-// http://rust-lang.org/COPYRIGHT.
-//
-// Licensed under the Apache License, Version 2.0 or the MIT license
-// , at your
-// option. This file may not be copied, modified, or distributed
-// except according to those terms.
-
-#[cfg(proc_macro)] //~ ERROR: experimental and subject to change
-fn foo() {}
diff --git a/src/test/compile-fail-fulldeps/proc-macro/illegal-proc-macro-derive-use.rs b/src/test/compile-fail-fulldeps/proc-macro/illegal-proc-macro-derive-use.rs
index 70c8db5ddd2ec..f37980c5e0f54 100644
--- a/src/test/compile-fail-fulldeps/proc-macro/illegal-proc-macro-derive-use.rs
+++ b/src/test/compile-fail-fulldeps/proc-macro/illegal-proc-macro-derive-use.rs
@@ -8,8 +8,6 @@
// option. This file may not be copied, modified, or distributed
// except according to those terms.
-#![feature(proc_macro, proc_macro_lib)]
-
extern crate proc_macro;
#[proc_macro_derive(Foo)]
diff --git a/src/test/compile-fail-fulldeps/proc-macro/import.rs b/src/test/compile-fail-fulldeps/proc-macro/import.rs
index 8f907183cc39b..fae2439344fb0 100644
--- a/src/test/compile-fail-fulldeps/proc-macro/import.rs
+++ b/src/test/compile-fail-fulldeps/proc-macro/import.rs
@@ -10,7 +10,6 @@
// aux-build:derive-a.rs
-#![feature(proc_macro)]
#![allow(warnings)]
#[macro_use]
diff --git a/src/test/compile-fail-fulldeps/proc-macro/issue-37788.rs b/src/test/compile-fail-fulldeps/proc-macro/issue-37788.rs
index 6d1030026dba2..691c280580122 100644
--- a/src/test/compile-fail-fulldeps/proc-macro/issue-37788.rs
+++ b/src/test/compile-fail-fulldeps/proc-macro/issue-37788.rs
@@ -10,8 +10,6 @@
// aux-build:derive-a-b.rs
-#![feature(proc_macro)]
-
#[macro_use]
extern crate derive_a_b;
diff --git a/src/test/compile-fail-fulldeps/proc-macro/item-error.rs b/src/test/compile-fail-fulldeps/proc-macro/item-error.rs
index 2a68accf91f71..4133e75e3a62d 100644
--- a/src/test/compile-fail-fulldeps/proc-macro/item-error.rs
+++ b/src/test/compile-fail-fulldeps/proc-macro/item-error.rs
@@ -10,7 +10,6 @@
// aux-build:derive-b.rs
-#![feature(proc_macro)]
#![allow(warnings)]
#[macro_use]
diff --git a/src/test/compile-fail-fulldeps/proc-macro/load-panic.rs b/src/test/compile-fail-fulldeps/proc-macro/load-panic.rs
index 39c27e82fa5b3..f9906b650fb87 100644
--- a/src/test/compile-fail-fulldeps/proc-macro/load-panic.rs
+++ b/src/test/compile-fail-fulldeps/proc-macro/load-panic.rs
@@ -10,8 +10,6 @@
// aux-build:derive-panic.rs
-#![feature(proc_macro)]
-
#[macro_use]
extern crate derive_panic;
diff --git a/src/test/compile-fail-fulldeps/proc-macro/proc-macro-attributes.rs b/src/test/compile-fail-fulldeps/proc-macro/proc-macro-attributes.rs
index 651a277d4abd5..4ad1cf79d61c6 100644
--- a/src/test/compile-fail-fulldeps/proc-macro/proc-macro-attributes.rs
+++ b/src/test/compile-fail-fulldeps/proc-macro/proc-macro-attributes.rs
@@ -10,7 +10,6 @@
// aux-build:derive-b.rs
-#![feature(proc_macro)]
#![allow(warnings)]
#[macro_use]
diff --git a/src/test/compile-fail-fulldeps/proc-macro/pub-at-crate-root.rs b/src/test/compile-fail-fulldeps/proc-macro/pub-at-crate-root.rs
index 2bf25892c44d2..238dde5160cd4 100644
--- a/src/test/compile-fail-fulldeps/proc-macro/pub-at-crate-root.rs
+++ b/src/test/compile-fail-fulldeps/proc-macro/pub-at-crate-root.rs
@@ -9,7 +9,6 @@
// except according to those terms.
#![crate_type = "proc-macro"]
-#![feature(proc_macro, proc_macro_lib)]
extern crate proc_macro;
diff --git a/src/test/compile-fail-fulldeps/proc-macro/shadow-builtin.rs b/src/test/compile-fail-fulldeps/proc-macro/shadow-builtin.rs
index 1bcd4b15eb863..8c5affb7b5ab3 100644
--- a/src/test/compile-fail-fulldeps/proc-macro/shadow-builtin.rs
+++ b/src/test/compile-fail-fulldeps/proc-macro/shadow-builtin.rs
@@ -9,7 +9,6 @@
// except according to those terms.
#![crate_type = "proc-macro"]
-#![feature(proc_macro, proc_macro_lib)]
extern crate proc_macro;
diff --git a/src/test/compile-fail-fulldeps/proc-macro/shadow.rs b/src/test/compile-fail-fulldeps/proc-macro/shadow.rs
index dc828fbf7d160..d76cf003ed14d 100644
--- a/src/test/compile-fail-fulldeps/proc-macro/shadow.rs
+++ b/src/test/compile-fail-fulldeps/proc-macro/shadow.rs
@@ -10,8 +10,6 @@
// aux-build:derive-a.rs
-#![feature(proc_macro)]
-
#[macro_use]
extern crate derive_a;
#[macro_use]
diff --git a/src/test/compile-fail-fulldeps/proc-macro/signature.rs b/src/test/compile-fail-fulldeps/proc-macro/signature.rs
index b7df9489dff30..6d6b5a23e941f 100644
--- a/src/test/compile-fail-fulldeps/proc-macro/signature.rs
+++ b/src/test/compile-fail-fulldeps/proc-macro/signature.rs
@@ -9,7 +9,6 @@
// except according to those terms.
#![crate_type = "proc-macro"]
-#![feature(proc_macro, proc_macro_lib)]
#![allow(warnings)]
extern crate proc_macro;
diff --git a/src/test/run-make/issue-37839/a.rs b/src/test/run-make/issue-37839/a.rs
index 3dff45388c75b..052317438c2f7 100644
--- a/src/test/run-make/issue-37839/a.rs
+++ b/src/test/run-make/issue-37839/a.rs
@@ -8,6 +8,5 @@
// option. This file may not be copied, modified, or distributed
// except according to those terms.
-#![feature(proc_macro)]
#![allow(unused)]
#![crate_type = "proc-macro"]
diff --git a/src/test/run-make/issue-37893/a.rs b/src/test/run-make/issue-37893/a.rs
index 3dff45388c75b..052317438c2f7 100644
--- a/src/test/run-make/issue-37893/a.rs
+++ b/src/test/run-make/issue-37893/a.rs
@@ -8,6 +8,5 @@
// option. This file may not be copied, modified, or distributed
// except according to those terms.
-#![feature(proc_macro)]
#![allow(unused)]
#![crate_type = "proc-macro"]
diff --git a/src/test/run-make/issue-38237/foo.rs b/src/test/run-make/issue-38237/foo.rs
index c291ffbf4e856..6fb315731de17 100644
--- a/src/test/run-make/issue-38237/foo.rs
+++ b/src/test/run-make/issue-38237/foo.rs
@@ -9,7 +9,6 @@
// except according to those terms.
#![crate_type = "proc-macro"]
-#![feature(proc_macro, proc_macro_lib)]
extern crate proc_macro;
diff --git a/src/test/run-make/rustc-macro-dep-files/bar.rs b/src/test/run-make/rustc-macro-dep-files/bar.rs
index a2db98049d287..03330c3d1700d 100644
--- a/src/test/run-make/rustc-macro-dep-files/bar.rs
+++ b/src/test/run-make/rustc-macro-dep-files/bar.rs
@@ -8,8 +8,6 @@
// option. This file may not be copied, modified, or distributed
// except according to those terms.
-#![feature(proc_macro)]
-
#[macro_use]
extern crate foo;
diff --git a/src/test/run-make/rustc-macro-dep-files/foo.rs b/src/test/run-make/rustc-macro-dep-files/foo.rs
index bd9e9158c5052..2f2524f6ef115 100644
--- a/src/test/run-make/rustc-macro-dep-files/foo.rs
+++ b/src/test/run-make/rustc-macro-dep-files/foo.rs
@@ -9,8 +9,6 @@
// except according to those terms.
#![crate_type = "proc-macro"]
-#![feature(proc_macro)]
-#![feature(proc_macro_lib)]
extern crate proc_macro;
diff --git a/src/test/run-pass-fulldeps/proc-macro/add-impl.rs b/src/test/run-pass-fulldeps/proc-macro/add-impl.rs
index e82282f3d8c58..7ea7ceafc2876 100644
--- a/src/test/run-pass-fulldeps/proc-macro/add-impl.rs
+++ b/src/test/run-pass-fulldeps/proc-macro/add-impl.rs
@@ -10,8 +10,6 @@
// aux-build:add-impl.rs
-#![feature(proc_macro)]
-
#[macro_use]
extern crate add_impl;
diff --git a/src/test/run-pass-fulldeps/proc-macro/append-impl.rs b/src/test/run-pass-fulldeps/proc-macro/append-impl.rs
index f062111df9daf..591f3331d28c0 100644
--- a/src/test/run-pass-fulldeps/proc-macro/append-impl.rs
+++ b/src/test/run-pass-fulldeps/proc-macro/append-impl.rs
@@ -10,7 +10,6 @@
// aux-build:append-impl.rs
-#![feature(proc_macro)]
#![allow(warnings)]
#[macro_use]
diff --git a/src/test/run-pass-fulldeps/proc-macro/auxiliary/add-impl.rs b/src/test/run-pass-fulldeps/proc-macro/auxiliary/add-impl.rs
index 1d34049db249f..3959eccd81e35 100644
--- a/src/test/run-pass-fulldeps/proc-macro/auxiliary/add-impl.rs
+++ b/src/test/run-pass-fulldeps/proc-macro/auxiliary/add-impl.rs
@@ -11,8 +11,6 @@
// no-prefer-dynamic
#![crate_type = "proc-macro"]
-#![feature(proc_macro)]
-#![feature(proc_macro_lib)]
extern crate proc_macro;
diff --git a/src/test/run-pass-fulldeps/proc-macro/auxiliary/append-impl.rs b/src/test/run-pass-fulldeps/proc-macro/auxiliary/append-impl.rs
index 7260bc4a5e7bb..fdce709e5bad6 100644
--- a/src/test/run-pass-fulldeps/proc-macro/auxiliary/append-impl.rs
+++ b/src/test/run-pass-fulldeps/proc-macro/auxiliary/append-impl.rs
@@ -11,8 +11,6 @@
// force-host
// no-prefer-dynamic
-#![feature(proc_macro)]
-#![feature(proc_macro_lib)]
#![crate_type = "proc-macro"]
extern crate proc_macro;
diff --git a/src/test/run-pass-fulldeps/proc-macro/auxiliary/derive-a.rs b/src/test/run-pass-fulldeps/proc-macro/auxiliary/derive-a.rs
index eaada5542274c..a253c6224aa68 100644
--- a/src/test/run-pass-fulldeps/proc-macro/auxiliary/derive-a.rs
+++ b/src/test/run-pass-fulldeps/proc-macro/auxiliary/derive-a.rs
@@ -11,8 +11,6 @@
// no-prefer-dynamic
#![crate_type = "proc-macro"]
-#![feature(proc_macro)]
-#![feature(proc_macro_lib)]
extern crate proc_macro;
diff --git a/src/test/run-pass-fulldeps/proc-macro/auxiliary/derive-atob.rs b/src/test/run-pass-fulldeps/proc-macro/auxiliary/derive-atob.rs
index a942adc4c8020..713fb7d10f2fd 100644
--- a/src/test/run-pass-fulldeps/proc-macro/auxiliary/derive-atob.rs
+++ b/src/test/run-pass-fulldeps/proc-macro/auxiliary/derive-atob.rs
@@ -11,8 +11,6 @@
// no-prefer-dynamic
#![crate_type = "proc-macro"]
-#![feature(proc_macro)]
-#![feature(proc_macro_lib)]
extern crate proc_macro;
diff --git a/src/test/run-pass-fulldeps/proc-macro/auxiliary/derive-b.rs b/src/test/run-pass-fulldeps/proc-macro/auxiliary/derive-b.rs
index a02b798c8023e..c18cda895325b 100644
--- a/src/test/run-pass-fulldeps/proc-macro/auxiliary/derive-b.rs
+++ b/src/test/run-pass-fulldeps/proc-macro/auxiliary/derive-b.rs
@@ -11,8 +11,6 @@
// no-prefer-dynamic
#![crate_type = "proc-macro"]
-#![feature(proc_macro)]
-#![feature(proc_macro_lib)]
extern crate proc_macro;
diff --git a/src/test/run-pass-fulldeps/proc-macro/auxiliary/derive-ctod.rs b/src/test/run-pass-fulldeps/proc-macro/auxiliary/derive-ctod.rs
index 50f1a390b2939..19caafd17b5f3 100644
--- a/src/test/run-pass-fulldeps/proc-macro/auxiliary/derive-ctod.rs
+++ b/src/test/run-pass-fulldeps/proc-macro/auxiliary/derive-ctod.rs
@@ -11,8 +11,6 @@
// no-prefer-dynamic
#![crate_type = "proc-macro"]
-#![feature(proc_macro)]
-#![feature(proc_macro_lib)]
extern crate proc_macro;
diff --git a/src/test/run-pass-fulldeps/proc-macro/auxiliary/derive-nothing.rs b/src/test/run-pass-fulldeps/proc-macro/auxiliary/derive-nothing.rs
index a9257cb4c8b78..cfe428bf5f323 100644
--- a/src/test/run-pass-fulldeps/proc-macro/auxiliary/derive-nothing.rs
+++ b/src/test/run-pass-fulldeps/proc-macro/auxiliary/derive-nothing.rs
@@ -11,8 +11,6 @@
// no-prefer-dynamic
#![crate_type = "proc-macro"]
-#![feature(proc_macro)]
-#![feature(proc_macro_lib)]
extern crate proc_macro;
diff --git a/src/test/run-pass-fulldeps/proc-macro/auxiliary/derive-reexport.rs b/src/test/run-pass-fulldeps/proc-macro/auxiliary/derive-reexport.rs
index 05a6cbec69c5a..fae2d27ab6b75 100644
--- a/src/test/run-pass-fulldeps/proc-macro/auxiliary/derive-reexport.rs
+++ b/src/test/run-pass-fulldeps/proc-macro/auxiliary/derive-reexport.rs
@@ -10,7 +10,7 @@
// ignore-test
-#![feature(macro_reexport, proc_macro)]
+#![feature(macro_reexport)]
#[macro_reexport(A)]
extern crate derive_a;
diff --git a/src/test/run-pass-fulldeps/proc-macro/auxiliary/derive-same-struct.rs b/src/test/run-pass-fulldeps/proc-macro/auxiliary/derive-same-struct.rs
index bc8a0d575913b..a2c25ae50e8ec 100644
--- a/src/test/run-pass-fulldeps/proc-macro/auxiliary/derive-same-struct.rs
+++ b/src/test/run-pass-fulldeps/proc-macro/auxiliary/derive-same-struct.rs
@@ -11,9 +11,6 @@
// no-prefer-dynamic
// compile-flags:--crate-type proc-macro
-#![feature(proc_macro)]
-#![feature(proc_macro_lib)]
-
extern crate proc_macro;
use proc_macro::TokenStream;
diff --git a/src/test/run-pass-fulldeps/proc-macro/auxiliary/double.rs b/src/test/run-pass-fulldeps/proc-macro/auxiliary/double.rs
index 969ed91f595e6..f4404b737f952 100644
--- a/src/test/run-pass-fulldeps/proc-macro/auxiliary/double.rs
+++ b/src/test/run-pass-fulldeps/proc-macro/auxiliary/double.rs
@@ -11,8 +11,6 @@
// no-prefer-dynamic
#![crate_type = "proc-macro"]
-#![feature(proc_macro)]
-#![feature(proc_macro_lib)]
extern crate proc_macro;
diff --git a/src/test/run-pass-fulldeps/proc-macro/auxiliary/expand-with-a-macro.rs b/src/test/run-pass-fulldeps/proc-macro/auxiliary/expand-with-a-macro.rs
index 50eaf035962f1..e6831b6bfdf65 100644
--- a/src/test/run-pass-fulldeps/proc-macro/auxiliary/expand-with-a-macro.rs
+++ b/src/test/run-pass-fulldeps/proc-macro/auxiliary/expand-with-a-macro.rs
@@ -11,8 +11,6 @@
// no-prefer-dynamic
#![crate_type = "proc-macro"]
-#![feature(proc_macro)]
-#![feature(proc_macro_lib)]
#![deny(warnings)]
extern crate proc_macro;
diff --git a/src/test/run-pass-fulldeps/proc-macro/crate-var.rs b/src/test/run-pass-fulldeps/proc-macro/crate-var.rs
index d19b49ab18c07..ba1417ecb56e4 100644
--- a/src/test/run-pass-fulldeps/proc-macro/crate-var.rs
+++ b/src/test/run-pass-fulldeps/proc-macro/crate-var.rs
@@ -10,7 +10,6 @@
// aux-build:double.rs
-#![feature(proc_macro)]
#![allow(unused)]
#[macro_use]
diff --git a/src/test/run-pass-fulldeps/proc-macro/derive-b.rs b/src/test/run-pass-fulldeps/proc-macro/derive-b.rs
index f5bb93f012490..f1e1626ddf8ca 100644
--- a/src/test/run-pass-fulldeps/proc-macro/derive-b.rs
+++ b/src/test/run-pass-fulldeps/proc-macro/derive-b.rs
@@ -11,8 +11,6 @@
// aux-build:derive-b.rs
// ignore-stage1
-#![feature(proc_macro)]
-
#[macro_use]
extern crate derive_b;
diff --git a/src/test/run-pass-fulldeps/proc-macro/derive-same-struct.rs b/src/test/run-pass-fulldeps/proc-macro/derive-same-struct.rs
index 608f86bca5768..ce3ba60b0ecf4 100644
--- a/src/test/run-pass-fulldeps/proc-macro/derive-same-struct.rs
+++ b/src/test/run-pass-fulldeps/proc-macro/derive-same-struct.rs
@@ -10,8 +10,6 @@
// aux-build:derive-same-struct.rs
-#![feature(proc_macro)]
-
#[macro_use]
extern crate derive_same_struct;
diff --git a/src/test/run-pass-fulldeps/proc-macro/derive-test.rs b/src/test/run-pass-fulldeps/proc-macro/derive-test.rs
index 2f44515a873de..a07e8b6cd7e64 100644
--- a/src/test/run-pass-fulldeps/proc-macro/derive-test.rs
+++ b/src/test/run-pass-fulldeps/proc-macro/derive-test.rs
@@ -12,8 +12,6 @@
// compile-flags: --test
#![crate_type = "proc-macro"]
-#![feature(proc_macro)]
-#![feature(proc_macro, proc_macro_lib)]
extern crate proc_macro;
diff --git a/src/test/run-pass-fulldeps/proc-macro/expand-with-a-macro.rs b/src/test/run-pass-fulldeps/proc-macro/expand-with-a-macro.rs
index 16f3535adae3b..4ccd4615fb609 100644
--- a/src/test/run-pass-fulldeps/proc-macro/expand-with-a-macro.rs
+++ b/src/test/run-pass-fulldeps/proc-macro/expand-with-a-macro.rs
@@ -11,7 +11,6 @@
// aux-build:expand-with-a-macro.rs
// ignore-stage1
-#![feature(proc_macro)]
#![deny(warnings)]
#[macro_use]
diff --git a/src/test/run-pass-fulldeps/proc-macro/load-two.rs b/src/test/run-pass-fulldeps/proc-macro/load-two.rs
index 431c8c5902749..d15a83a2cbe43 100644
--- a/src/test/run-pass-fulldeps/proc-macro/load-two.rs
+++ b/src/test/run-pass-fulldeps/proc-macro/load-two.rs
@@ -11,8 +11,6 @@
// aux-build:derive-atob.rs
// aux-build:derive-ctod.rs
-#![feature(proc_macro)]
-
#[macro_use]
extern crate derive_atob;
#[macro_use]
diff --git a/src/test/run-pass-fulldeps/proc-macro/smoke.rs b/src/test/run-pass-fulldeps/proc-macro/smoke.rs
index cd7edb726447b..54d651df1f9af 100644
--- a/src/test/run-pass-fulldeps/proc-macro/smoke.rs
+++ b/src/test/run-pass-fulldeps/proc-macro/smoke.rs
@@ -11,8 +11,6 @@
// aux-build:derive-a.rs
// ignore-stage1
-#![feature(proc_macro)]
-
#[macro_use]
extern crate derive_a;
diff --git a/src/test/run-pass-fulldeps/proc-macro/struct-field-macro.rs b/src/test/run-pass-fulldeps/proc-macro/struct-field-macro.rs
index 818308b05a44e..c9056e08d4426 100644
--- a/src/test/run-pass-fulldeps/proc-macro/struct-field-macro.rs
+++ b/src/test/run-pass-fulldeps/proc-macro/struct-field-macro.rs
@@ -11,8 +11,6 @@
// aux-build:derive-nothing.rs
// ignore-stage1
-#![feature(proc_macro)]
-
#[macro_use]
extern crate derive_nothing;
diff --git a/src/test/run-pass-fulldeps/proc-macro/use-reexport.rs b/src/test/run-pass-fulldeps/proc-macro/use-reexport.rs
index 7f09d8faebbb5..f0a1bfe652857 100644
--- a/src/test/run-pass-fulldeps/proc-macro/use-reexport.rs
+++ b/src/test/run-pass-fulldeps/proc-macro/use-reexport.rs
@@ -11,8 +11,6 @@
// aux-build:derive-a.rs
// aux-build:derive-reexport.rs
-#![feature(proc_macro)]
-
#[macro_use]
extern crate derive_reexport;
diff --git a/src/test/rustdoc/rustc-macro-crate.rs b/src/test/rustdoc/rustc-macro-crate.rs
index fe80a90955045..dc28732b55ee2 100644
--- a/src/test/rustdoc/rustc-macro-crate.rs
+++ b/src/test/rustdoc/rustc-macro-crate.rs
@@ -10,8 +10,6 @@
// no-prefer-dynamic
-#![feature(proc_macro)]
-#![feature(proc_macro_lib)]
#![crate_type = "proc-macro"]
extern crate proc_macro;