mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-25 08:13:41 +00:00
Enable macro modularization implicitly if one of "advanced" macro features is enabled
Do not mark all builtin attributes as used when macro modularization is enabled
This commit is contained in:
parent
f60d96a477
commit
cb64672e0c
@ -83,10 +83,14 @@ macro_rules! declare_features {
|
||||
}
|
||||
|
||||
pub fn use_extern_macros(&self) -> bool {
|
||||
// The `decl_macro`, `tool_attributes` and `custom_attributes`
|
||||
// features imply `use_extern_macros`.
|
||||
// A number of "advanced" macro features enable
|
||||
// macro modularization (`use_extern_macros`) implicitly.
|
||||
self.use_extern_macros || self.decl_macro ||
|
||||
self.tool_attributes || self.custom_attribute
|
||||
self.tool_attributes || self.custom_attribute ||
|
||||
self.macros_in_extern || self.proc_macro_path_invoc ||
|
||||
self.proc_macro_mod || self.proc_macro_expr ||
|
||||
self.proc_macro_non_items || self.proc_macro_gen ||
|
||||
self.stmt_expr_attributes
|
||||
}
|
||||
}
|
||||
};
|
||||
@ -700,7 +704,7 @@ pub fn is_builtin_attr_name(name: ast::Name) -> bool {
|
||||
}
|
||||
|
||||
pub fn is_builtin_attr(attr: &ast::Attribute) -> bool {
|
||||
BUILTIN_ATTRIBUTES.iter().any(|&(builtin_name, _, _)| attr.check_name(builtin_name)) ||
|
||||
BUILTIN_ATTRIBUTES.iter().any(|&(builtin_name, _, _)| attr.path == builtin_name) ||
|
||||
attr.name().as_str().starts_with("rustc_")
|
||||
}
|
||||
|
||||
|
@ -13,7 +13,7 @@
|
||||
|
||||
//! Attributes producing expressions in invalid locations
|
||||
|
||||
#![feature(use_extern_macros, stmt_expr_attributes, proc_macro_expr)]
|
||||
#![feature(stmt_expr_attributes, proc_macro_expr)]
|
||||
|
||||
extern crate attr_stmt_expr;
|
||||
use attr_stmt_expr::{duplicate, no_output};
|
||||
|
@ -11,7 +11,7 @@
|
||||
// aux-build:attr-stmt-expr.rs
|
||||
// ignore-stage1
|
||||
|
||||
#![feature(use_extern_macros, proc_macro_expr)]
|
||||
#![feature(proc_macro_expr)]
|
||||
|
||||
extern crate attr_stmt_expr;
|
||||
use attr_stmt_expr::{expect_let, expect_print_stmt, expect_expr, expect_print_expr};
|
||||
|
@ -11,8 +11,6 @@
|
||||
// aux-build:issue_50493.rs
|
||||
// ignore-stage1
|
||||
|
||||
#![feature(proc_macro)]
|
||||
|
||||
#[macro_use]
|
||||
extern crate issue_50493;
|
||||
|
||||
|
@ -11,7 +11,7 @@
|
||||
// aux-build:bang_proc_macro2.rs
|
||||
// ignore-stage1
|
||||
|
||||
#![feature(use_extern_macros, proc_macro_non_items)]
|
||||
#![feature(proc_macro_non_items)]
|
||||
#![allow(unused_macros)]
|
||||
|
||||
extern crate bang_proc_macro2;
|
||||
|
@ -11,7 +11,7 @@
|
||||
// aux-build:attr_proc_macro.rs
|
||||
// ignore-tidy-linelength
|
||||
|
||||
#![feature(use_extern_macros, custom_attribute)]
|
||||
#![feature(custom_attribute)]
|
||||
//~^ ERROR Cannot use `#![feature(use_extern_macros)]` and `#![feature(custom_attribute)] at the same time
|
||||
|
||||
extern crate attr_proc_macro;
|
||||
|
@ -16,7 +16,7 @@
|
||||
// gate-test-proc_macro_mod
|
||||
// gate-test-proc_macro_gen
|
||||
|
||||
#![feature(use_extern_macros, stmt_expr_attributes)]
|
||||
#![feature(stmt_expr_attributes)]
|
||||
|
||||
extern crate proc_macro_gates as foo;
|
||||
|
||||
|
@ -10,7 +10,7 @@
|
||||
|
||||
// aux-build:proc-macro-gates.rs
|
||||
|
||||
#![feature(use_extern_macros, stmt_expr_attributes)]
|
||||
#![feature(stmt_expr_attributes)]
|
||||
|
||||
extern crate proc_macro_gates as foo;
|
||||
|
||||
|
@ -10,10 +10,6 @@
|
||||
|
||||
// gate-test-use_extern_macros
|
||||
|
||||
#![feature(proc_macro_path_invoc)]
|
||||
|
||||
fn main() {
|
||||
globnar::brotz!(); //~ ERROR non-ident macro paths are experimental
|
||||
#[derive(foo::Bar)] struct T; //~ ERROR non-ident macro paths are experimental
|
||||
::foo!(); //~ ERROR non-ident macro paths are experimental
|
||||
}
|
||||
|
@ -8,7 +8,7 @@
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
|
||||
#![feature(use_extern_macros, proc_macro_path_invoc)]
|
||||
#![feature(proc_macro_path_invoc)]
|
||||
|
||||
#[foo::bar] //~ ERROR failed to resolve. Use of undeclared type or module `foo`
|
||||
fn main() {}
|
||||
|
@ -11,7 +11,7 @@
|
||||
// no-prefer-dynamic
|
||||
|
||||
#![crate_type = "proc-macro"]
|
||||
#![feature(proc_macro, proc_macro_non_items)]
|
||||
#![feature(proc_macro_non_items)]
|
||||
|
||||
extern crate proc_macro;
|
||||
|
||||
|
@ -11,7 +11,7 @@
|
||||
// no-prefer-dynamic
|
||||
|
||||
#![crate_type = "proc-macro"]
|
||||
#![feature(use_extern_macros, proc_macro_non_items, proc_macro_quote)]
|
||||
#![feature(proc_macro_non_items, proc_macro_quote)]
|
||||
|
||||
extern crate proc_macro;
|
||||
|
||||
|
@ -11,7 +11,7 @@
|
||||
// no-prefer-dynamic
|
||||
|
||||
#![crate_type = "proc-macro"]
|
||||
#![feature(proc_macro, proc_macro_non_items)]
|
||||
#![feature(proc_macro_non_items)]
|
||||
|
||||
extern crate proc_macro;
|
||||
|
||||
|
@ -11,7 +11,7 @@
|
||||
// aux-build:cond_plugin.rs
|
||||
// ignore-stage1
|
||||
|
||||
#![feature(use_extern_macros, proc_macro_non_items)]
|
||||
#![feature(proc_macro_non_items)]
|
||||
|
||||
extern crate cond_plugin;
|
||||
|
||||
|
@ -13,7 +13,7 @@
|
||||
// aux-build:hello_macro.rs
|
||||
// ignore-stage1
|
||||
|
||||
#![feature(use_extern_macros, proc_macro_non_items, proc_macro_gen)]
|
||||
#![feature(proc_macro_non_items, proc_macro_gen)]
|
||||
|
||||
extern crate hello_macro;
|
||||
|
||||
|
@ -11,7 +11,7 @@
|
||||
// aux-build:attr-stmt-expr.rs
|
||||
// ignore-stage1
|
||||
|
||||
#![feature(use_extern_macros, stmt_expr_attributes, proc_macro_expr)]
|
||||
#![feature(stmt_expr_attributes, proc_macro_expr)]
|
||||
|
||||
extern crate attr_stmt_expr;
|
||||
use attr_stmt_expr::{expect_let, expect_print_stmt, expect_expr, expect_print_expr,
|
||||
|
@ -10,7 +10,7 @@
|
||||
|
||||
// no-prefer-dynamic
|
||||
|
||||
#![feature(proc_macro_non_items, proc_macro_quote, use_extern_macros)]
|
||||
#![feature(proc_macro_non_items, proc_macro_quote)]
|
||||
#![crate_type = "proc-macro"]
|
||||
|
||||
extern crate proc_macro;
|
||||
|
@ -10,7 +10,7 @@
|
||||
|
||||
// no-prefer-dynamic
|
||||
|
||||
#![feature(use_extern_macros, proc_macro_quote, proc_macro_non_items)]
|
||||
#![feature(proc_macro_quote, proc_macro_non_items)]
|
||||
#![crate_type = "proc-macro"]
|
||||
|
||||
extern crate proc_macro as proc_macro_renamed; // This does not break `quote!`
|
||||
|
@ -11,7 +11,7 @@
|
||||
// aux-build:bang-macro.rs
|
||||
// ignore-stage1
|
||||
|
||||
#![feature(use_extern_macros, proc_macro_non_items)]
|
||||
#![feature(proc_macro_non_items)]
|
||||
|
||||
extern crate bang_macro;
|
||||
use bang_macro::rewrite;
|
||||
|
@ -11,7 +11,7 @@
|
||||
// aux-build:call-site.rs
|
||||
// ignore-stage1
|
||||
|
||||
#![feature(proc_macro_non_items, use_extern_macros)]
|
||||
#![feature(proc_macro_non_items)]
|
||||
|
||||
extern crate call_site;
|
||||
use call_site::*;
|
||||
|
@ -11,7 +11,7 @@
|
||||
// aux-build:count_compound_ops.rs
|
||||
// ignore-stage1
|
||||
|
||||
#![feature(use_extern_macros, proc_macro_non_items)]
|
||||
#![feature(proc_macro_non_items)]
|
||||
|
||||
extern crate count_compound_ops;
|
||||
use count_compound_ops::count_compound_ops;
|
||||
|
@ -11,7 +11,7 @@
|
||||
// aux-build:derive-b.rs
|
||||
// ignore-stage1
|
||||
|
||||
#![feature(use_extern_macros, proc_macro_path_invoc)]
|
||||
#![feature(proc_macro_path_invoc)]
|
||||
|
||||
extern crate derive_b;
|
||||
|
||||
|
@ -12,7 +12,7 @@
|
||||
// aux-build:hygiene_example.rs
|
||||
// ignore-stage1
|
||||
|
||||
#![feature(use_extern_macros, proc_macro_non_items)]
|
||||
#![feature(proc_macro_non_items)]
|
||||
|
||||
extern crate hygiene_example;
|
||||
use hygiene_example::hello;
|
||||
|
@ -12,7 +12,7 @@
|
||||
// ignore-stage1
|
||||
// ignore-wasm32
|
||||
|
||||
#![feature(use_extern_macros, macros_in_extern)]
|
||||
#![feature(macros_in_extern)]
|
||||
|
||||
extern crate test_macros;
|
||||
|
||||
|
@ -12,7 +12,7 @@
|
||||
// ignore-stage1
|
||||
// ignore-cross-compile
|
||||
|
||||
#![feature(use_extern_macros, proc_macro_non_items)]
|
||||
#![feature(proc_macro_non_items)]
|
||||
|
||||
extern crate proc_macro_def;
|
||||
|
||||
|
@ -10,7 +10,7 @@
|
||||
|
||||
// force-host
|
||||
// no-prefer-dynamic
|
||||
#![feature(proc_macro)]
|
||||
|
||||
#![crate_type = "proc-macro"]
|
||||
|
||||
extern crate proc_macro;
|
||||
|
@ -10,7 +10,7 @@
|
||||
|
||||
// force-host
|
||||
// no-prefer-dynamic
|
||||
#![feature(proc_macro)]
|
||||
|
||||
#![crate_type = "proc-macro"]
|
||||
|
||||
extern crate proc_macro;
|
||||
|
@ -10,7 +10,6 @@
|
||||
|
||||
// no-prefer-dynamic
|
||||
|
||||
#![feature(proc_macro)]
|
||||
#![crate_type = "proc-macro"]
|
||||
|
||||
extern crate proc_macro;
|
||||
|
@ -10,7 +10,7 @@
|
||||
|
||||
// aux-build:lifetimes.rs
|
||||
|
||||
#![feature(use_extern_macros, proc_macro_non_items)]
|
||||
#![feature(proc_macro_non_items)]
|
||||
|
||||
extern crate lifetimes;
|
||||
|
||||
|
@ -11,7 +11,6 @@
|
||||
// run-pass
|
||||
// no-prefer-dynamic
|
||||
|
||||
#![feature(proc_macro)]
|
||||
#![crate_type = "proc-macro"]
|
||||
|
||||
extern crate proc_macro;
|
||||
|
@ -12,7 +12,7 @@
|
||||
|
||||
// aux-build:generate-mod.rs
|
||||
|
||||
#![feature(use_extern_macros, proc_macro_gen, proc_macro_path_invoc)]
|
||||
#![feature(proc_macro_gen, proc_macro_path_invoc)]
|
||||
|
||||
extern crate generate_mod;
|
||||
|
||||
|
@ -11,7 +11,6 @@
|
||||
// no-prefer-dynamic
|
||||
|
||||
#![crate_type = "proc-macro"]
|
||||
#![feature(proc_macro)]
|
||||
|
||||
extern crate proc_macro;
|
||||
|
||||
|
@ -1,35 +1,35 @@
|
||||
error: `#[proc_macro]` attribute does not take any arguments
|
||||
--> $DIR/invalid-attributes.rs:20:1
|
||||
--> $DIR/invalid-attributes.rs:19:1
|
||||
|
|
||||
LL | #[proc_macro = "test"] //~ ERROR: does not take any arguments
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: `#[proc_macro]` attribute does not take any arguments
|
||||
--> $DIR/invalid-attributes.rs:23:1
|
||||
--> $DIR/invalid-attributes.rs:22:1
|
||||
|
|
||||
LL | #[proc_macro()] //~ ERROR: does not take any arguments
|
||||
| ^^^^^^^^^^^^^^^
|
||||
|
||||
error: `#[proc_macro]` attribute does not take any arguments
|
||||
--> $DIR/invalid-attributes.rs:26:1
|
||||
--> $DIR/invalid-attributes.rs:25:1
|
||||
|
|
||||
LL | #[proc_macro(x)] //~ ERROR: does not take any arguments
|
||||
| ^^^^^^^^^^^^^^^^
|
||||
|
||||
error: `#[proc_macro_attribute]` attribute does not take any arguments
|
||||
--> $DIR/invalid-attributes.rs:29:1
|
||||
--> $DIR/invalid-attributes.rs:28:1
|
||||
|
|
||||
LL | #[proc_macro_attribute = "test"] //~ ERROR: does not take any arguments
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: `#[proc_macro_attribute]` attribute does not take any arguments
|
||||
--> $DIR/invalid-attributes.rs:32:1
|
||||
--> $DIR/invalid-attributes.rs:31:1
|
||||
|
|
||||
LL | #[proc_macro_attribute()] //~ ERROR: does not take any arguments
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: `#[proc_macro_attribute]` attribute does not take any arguments
|
||||
--> $DIR/invalid-attributes.rs:35:1
|
||||
--> $DIR/invalid-attributes.rs:34:1
|
||||
|
|
||||
LL | #[proc_macro_attribute(x)] //~ ERROR: does not take any arguments
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
@ -10,7 +10,7 @@
|
||||
|
||||
// no-prefer-dynamic
|
||||
|
||||
#![feature(proc_macro, decl_macro)]
|
||||
#![feature(decl_macro)]
|
||||
#![crate_type = "proc-macro"]
|
||||
|
||||
extern crate proc_macro;
|
||||
|
@ -10,7 +10,6 @@
|
||||
|
||||
// no-prefer-dynamic
|
||||
|
||||
#![feature(proc_macro)]
|
||||
#![crate_type = "proc-macro"]
|
||||
|
||||
extern crate proc_macro;
|
||||
|
@ -1,5 +1,5 @@
|
||||
error: functions tagged with `#[proc_macro]` must currently reside in the root of the crate
|
||||
--> $DIR/non-root.rs:21:5
|
||||
--> $DIR/non-root.rs:20:5
|
||||
|
|
||||
LL | pub fn foo(arg: TokenStream) -> TokenStream { arg }
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
@ -11,7 +11,7 @@
|
||||
// aux-build:three-equals.rs
|
||||
// ignore-stage1
|
||||
|
||||
#![feature(use_extern_macros, proc_macro_non_items)]
|
||||
#![feature(proc_macro_non_items)]
|
||||
|
||||
extern crate three_equals;
|
||||
|
||||
|
@ -10,7 +10,7 @@
|
||||
|
||||
// aux-build:two_macros.rs
|
||||
|
||||
#![feature(item_like_imports, use_extern_macros)]
|
||||
#![feature(use_extern_macros)]
|
||||
|
||||
extern crate two_macros; // two identity macros `m` and `n`
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user