Stabilize proc macros in type positions

This commit is contained in:
Vadim Petrochenkov 2019-08-27 03:48:48 +03:00
parent 349259d55f
commit 5ae38bbc7c
8 changed files with 23 additions and 27 deletions

View File

@ -1,4 +1,3 @@
#![feature(proc_macro_hygiene)]
#![allow(rustc::default_hash_types)] #![allow(rustc::default_hash_types)]
#![recursion_limit="128"] #![recursion_limit="128"]

View File

@ -749,14 +749,14 @@ impl<'a, 'b> MacroExpander<'a, 'b> {
fn gate_proc_macro_expansion_kind(&self, span: Span, kind: AstFragmentKind) { fn gate_proc_macro_expansion_kind(&self, span: Span, kind: AstFragmentKind) {
let kind = match kind { let kind = match kind {
AstFragmentKind::Expr => "expressions", AstFragmentKind::Expr |
AstFragmentKind::OptExpr => "expressions", AstFragmentKind::OptExpr => "expressions",
AstFragmentKind::Pat => "patterns", AstFragmentKind::Pat => "patterns",
AstFragmentKind::Ty => "types",
AstFragmentKind::Stmts => "statements", AstFragmentKind::Stmts => "statements",
AstFragmentKind::Items => return, AstFragmentKind::Ty |
AstFragmentKind::TraitItems => return, AstFragmentKind::Items |
AstFragmentKind::ImplItems => return, AstFragmentKind::TraitItems |
AstFragmentKind::ImplItems |
AstFragmentKind::ForeignItems => return, AstFragmentKind::ForeignItems => return,
AstFragmentKind::Arms AstFragmentKind::Arms
| AstFragmentKind::Fields | AstFragmentKind::Fields

View File

@ -7,8 +7,6 @@
// normalize-stdout-test "bytes\([^0]\w*\.\.(\w+)\)" -> "bytes(LO..$1)" // normalize-stdout-test "bytes\([^0]\w*\.\.(\w+)\)" -> "bytes(LO..$1)"
// normalize-stdout-test "bytes\((\w+)\.\.[^0]\w*\)" -> "bytes($1..HI)" // normalize-stdout-test "bytes\((\w+)\.\.[^0]\w*\)" -> "bytes($1..HI)"
#![feature(proc_macro_hygiene)]
#[macro_use] #[macro_use]
extern crate test_macros; extern crate test_macros;
extern crate dollar_crate_external; extern crate dollar_crate_external;

View File

@ -1,7 +1,5 @@
// aux-build:lifetimes.rs // aux-build:lifetimes.rs
#![feature(proc_macro_hygiene)]
extern crate lifetimes; extern crate lifetimes;
use lifetimes::*; use lifetimes::*;

View File

@ -1,5 +1,5 @@
error: expected type, found `'` error: expected type, found `'`
--> $DIR/lifetimes.rs:9:10 --> $DIR/lifetimes.rs:7:10
| |
LL | type A = single_quote_alone!(); LL | type A = single_quote_alone!();
| ^^^^^^^^^^^^^^^^^^^^^ this macro call doesn't expand to a type | ^^^^^^^^^^^^^^^^^^^^^ this macro call doesn't expand to a type

View File

@ -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;
}

View File

@ -50,7 +50,6 @@ fn attrs() {
} }
fn main() { fn main() {
let _x: identity!(u32) = 3; //~ ERROR: procedural macros cannot be expanded to types
if let identity!(Some(_x)) = Some(3) {} if let identity!(Some(_x)) = Some(3) {}
//~^ ERROR: procedural macros cannot be expanded to patterns //~^ ERROR: procedural macros cannot be expanded to patterns

View File

@ -94,17 +94,8 @@ LL | let _x = #[identity_attr] println!();
= note: for more information, see https://github.com/rust-lang/rust/issues/54727 = 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 = 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 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) {} 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 = help: add `#![feature(proc_macro_hygiene)]` to the crate attributes to enable
error[E0658]: procedural macros cannot be expanded to statements 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;); LL | empty!(struct S;);
| ^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^
@ -122,7 +113,7 @@ LL | empty!(struct S;);
= help: add `#![feature(proc_macro_hygiene)]` to the crate attributes to enable = help: add `#![feature(proc_macro_hygiene)]` to the crate attributes to enable
error[E0658]: procedural macros cannot be expanded to statements 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;); 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 = help: add `#![feature(proc_macro_hygiene)]` to the crate attributes to enable
error[E0658]: procedural macros cannot be expanded to expressions 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); 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 = help: add `#![feature(proc_macro_hygiene)]` to the crate attributes to enable
error[E0658]: procedural macros cannot be expanded to expressions 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)]; 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 = 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 = 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`. For more information about this error, try `rustc --explain E0658`.