From 5ae38bbc7c6c79c4bbdb2f098bf770c24087f403 Mon Sep 17 00:00:00 2001 From: Vadim Petrochenkov Date: Tue, 27 Aug 2019 03:48:48 +0300 Subject: [PATCH] Stabilize proc macros in type positions --- src/librustc_macros/src/lib.rs | 1 - src/libsyntax/ext/expand.rs | 10 ++++----- .../ui/proc-macro/dollar-crate-issue-62325.rs | 2 -- src/test/ui/proc-macro/lifetimes.rs | 2 -- src/test/ui/proc-macro/lifetimes.stderr | 2 +- src/test/ui/proc-macro/macros-in-type.rs | 11 ++++++++++ src/test/ui/proc-macro/proc-macro-gates.rs | 1 - .../ui/proc-macro/proc-macro-gates.stderr | 21 ++++++------------- 8 files changed, 23 insertions(+), 27 deletions(-) create mode 100644 src/test/ui/proc-macro/macros-in-type.rs diff --git a/src/librustc_macros/src/lib.rs b/src/librustc_macros/src/lib.rs index 3d3a020ef0c..0540c95d3de 100644 --- a/src/librustc_macros/src/lib.rs +++ b/src/librustc_macros/src/lib.rs @@ -1,4 +1,3 @@ -#![feature(proc_macro_hygiene)] #![allow(rustc::default_hash_types)] #![recursion_limit="128"] diff --git a/src/libsyntax/ext/expand.rs b/src/libsyntax/ext/expand.rs index cf8edf54673..581ef5d4da9 100644 --- a/src/libsyntax/ext/expand.rs +++ b/src/libsyntax/ext/expand.rs @@ -749,14 +749,14 @@ fn visit_mac(&mut self, _mac: &'ast ast::Mac) { fn gate_proc_macro_expansion_kind(&self, span: Span, kind: AstFragmentKind) { let kind = match kind { - AstFragmentKind::Expr => "expressions", + AstFragmentKind::Expr | AstFragmentKind::OptExpr => "expressions", AstFragmentKind::Pat => "patterns", - AstFragmentKind::Ty => "types", AstFragmentKind::Stmts => "statements", - AstFragmentKind::Items => return, - AstFragmentKind::TraitItems => return, - AstFragmentKind::ImplItems => return, + AstFragmentKind::Ty | + AstFragmentKind::Items | + AstFragmentKind::TraitItems | + AstFragmentKind::ImplItems | AstFragmentKind::ForeignItems => return, AstFragmentKind::Arms | AstFragmentKind::Fields diff --git a/src/test/ui/proc-macro/dollar-crate-issue-62325.rs b/src/test/ui/proc-macro/dollar-crate-issue-62325.rs index b7b152e6692..223c4047cb2 100644 --- a/src/test/ui/proc-macro/dollar-crate-issue-62325.rs +++ b/src/test/ui/proc-macro/dollar-crate-issue-62325.rs @@ -7,8 +7,6 @@ // normalize-stdout-test "bytes\([^0]\w*\.\.(\w+)\)" -> "bytes(LO..$1)" // normalize-stdout-test "bytes\((\w+)\.\.[^0]\w*\)" -> "bytes($1..HI)" -#![feature(proc_macro_hygiene)] - #[macro_use] extern crate test_macros; extern crate dollar_crate_external; diff --git a/src/test/ui/proc-macro/lifetimes.rs b/src/test/ui/proc-macro/lifetimes.rs index d0dd1b4603b..5605696715e 100644 --- a/src/test/ui/proc-macro/lifetimes.rs +++ b/src/test/ui/proc-macro/lifetimes.rs @@ -1,7 +1,5 @@ // aux-build:lifetimes.rs -#![feature(proc_macro_hygiene)] - extern crate lifetimes; use lifetimes::*; diff --git a/src/test/ui/proc-macro/lifetimes.stderr b/src/test/ui/proc-macro/lifetimes.stderr index 6e91201405c..10acd4304aa 100644 --- a/src/test/ui/proc-macro/lifetimes.stderr +++ b/src/test/ui/proc-macro/lifetimes.stderr @@ -1,5 +1,5 @@ error: expected type, found `'` - --> $DIR/lifetimes.rs:9:10 + --> $DIR/lifetimes.rs:7:10 | LL | type A = single_quote_alone!(); | ^^^^^^^^^^^^^^^^^^^^^ this macro call doesn't expand to a type diff --git a/src/test/ui/proc-macro/macros-in-type.rs b/src/test/ui/proc-macro/macros-in-type.rs new file mode 100644 index 00000000000..19ed58eceb9 --- /dev/null +++ b/src/test/ui/proc-macro/macros-in-type.rs @@ -0,0 +1,11 @@ +// check-pass +// aux-build:test-macros.rs + +#[macro_use] +extern crate test_macros; + +const C: identity!(u8) = 10; + +fn main() { + let c: u8 = C; +} diff --git a/src/test/ui/proc-macro/proc-macro-gates.rs b/src/test/ui/proc-macro/proc-macro-gates.rs index 678dc83b753..0096a84f14c 100644 --- a/src/test/ui/proc-macro/proc-macro-gates.rs +++ b/src/test/ui/proc-macro/proc-macro-gates.rs @@ -50,7 +50,6 @@ fn attrs() { } fn main() { - let _x: identity!(u32) = 3; //~ ERROR: procedural macros cannot be expanded to types if let identity!(Some(_x)) = Some(3) {} //~^ ERROR: procedural macros cannot be expanded to patterns diff --git a/src/test/ui/proc-macro/proc-macro-gates.stderr b/src/test/ui/proc-macro/proc-macro-gates.stderr index 8462b564ec1..14a4f8c0fbc 100644 --- a/src/test/ui/proc-macro/proc-macro-gates.stderr +++ b/src/test/ui/proc-macro/proc-macro-gates.stderr @@ -94,17 +94,8 @@ LL | let _x = #[identity_attr] println!(); = note: for more information, see https://github.com/rust-lang/rust/issues/54727 = help: add `#![feature(proc_macro_hygiene)]` to the crate attributes to enable -error[E0658]: procedural macros cannot be expanded to types - --> $DIR/proc-macro-gates.rs:53:13 - | -LL | let _x: identity!(u32) = 3; - | ^^^^^^^^^^^^^^ - | - = note: for more information, see https://github.com/rust-lang/rust/issues/54727 - = help: add `#![feature(proc_macro_hygiene)]` to the crate attributes to enable - error[E0658]: procedural macros cannot be expanded to patterns - --> $DIR/proc-macro-gates.rs:54:12 + --> $DIR/proc-macro-gates.rs:53:12 | LL | if let identity!(Some(_x)) = Some(3) {} | ^^^^^^^^^^^^^^^^^^^ @@ -113,7 +104,7 @@ LL | if let identity!(Some(_x)) = Some(3) {} = help: add `#![feature(proc_macro_hygiene)]` to the crate attributes to enable error[E0658]: procedural macros cannot be expanded to statements - --> $DIR/proc-macro-gates.rs:57:5 + --> $DIR/proc-macro-gates.rs:56:5 | LL | empty!(struct S;); | ^^^^^^^^^^^^^^^^^^ @@ -122,7 +113,7 @@ LL | empty!(struct S;); = help: add `#![feature(proc_macro_hygiene)]` to the crate attributes to enable error[E0658]: procedural macros cannot be expanded to statements - --> $DIR/proc-macro-gates.rs:58:5 + --> $DIR/proc-macro-gates.rs:57:5 | LL | empty!(let _x = 3;); | ^^^^^^^^^^^^^^^^^^^^ @@ -131,7 +122,7 @@ LL | empty!(let _x = 3;); = help: add `#![feature(proc_macro_hygiene)]` to the crate attributes to enable error[E0658]: procedural macros cannot be expanded to expressions - --> $DIR/proc-macro-gates.rs:60:14 + --> $DIR/proc-macro-gates.rs:59:14 | LL | let _x = identity!(3); | ^^^^^^^^^^^^ @@ -140,7 +131,7 @@ LL | let _x = identity!(3); = help: add `#![feature(proc_macro_hygiene)]` to the crate attributes to enable error[E0658]: procedural macros cannot be expanded to expressions - --> $DIR/proc-macro-gates.rs:61:15 + --> $DIR/proc-macro-gates.rs:60:15 | LL | let _x = [empty!(3)]; | ^^^^^^^^^ @@ -148,6 +139,6 @@ LL | let _x = [empty!(3)]; = note: for more information, see https://github.com/rust-lang/rust/issues/54727 = help: add `#![feature(proc_macro_hygiene)]` to the crate attributes to enable -error: aborting due to 17 previous errors +error: aborting due to 16 previous errors For more information about this error, try `rustc --explain E0658`. -- 2.44.0