about summary refs log tree commit diff
diff options
context:
space:
mode:
authorVadim Petrochenkov <vadim.petrochenkov@gmail.com>2019-08-27 03:48:48 +0300
committerVadim Petrochenkov <vadim.petrochenkov@gmail.com>2019-09-30 21:59:35 +0300
commit5ae38bbc7c6c79c4bbdb2f098bf770c24087f403 (patch)
treeb830af373e756c684869bdfdbfe2a712c4c3da1e
parent349259d55f9b006fe871a26eaa2481b4103dc9d7 (diff)
downloadrust-5ae38bbc7c6c79c4bbdb2f098bf770c24087f403.tar.gz
rust-5ae38bbc7c6c79c4bbdb2f098bf770c24087f403.zip
Stabilize proc macros in type positions
-rw-r--r--src/librustc_macros/src/lib.rs1
-rw-r--r--src/libsyntax/ext/expand.rs10
-rw-r--r--src/test/ui/proc-macro/dollar-crate-issue-62325.rs2
-rw-r--r--src/test/ui/proc-macro/lifetimes.rs2
-rw-r--r--src/test/ui/proc-macro/lifetimes.stderr2
-rw-r--r--src/test/ui/proc-macro/macros-in-type.rs11
-rw-r--r--src/test/ui/proc-macro/proc-macro-gates.rs1
-rw-r--r--src/test/ui/proc-macro/proc-macro-gates.stderr21
8 files changed, 23 insertions, 27 deletions
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 @@ impl<'a, 'b> MacroExpander<'a, 'b> {
 
     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`.