mirror of
https://github.com/rust-lang/rust.git
synced 2025-02-05 11:33:04 +00:00
Stabilize proc macros in type positions
This commit is contained in:
parent
349259d55f
commit
5ae38bbc7c
@ -1,4 +1,3 @@
|
|||||||
#![feature(proc_macro_hygiene)]
|
|
||||||
#![allow(rustc::default_hash_types)]
|
#![allow(rustc::default_hash_types)]
|
||||||
|
|
||||||
#![recursion_limit="128"]
|
#![recursion_limit="128"]
|
||||||
|
@ -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
|
||||||
|
@ -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;
|
||||||
|
@ -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::*;
|
||||||
|
@ -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
|
||||||
|
11
src/test/ui/proc-macro/macros-in-type.rs
Normal file
11
src/test/ui/proc-macro/macros-in-type.rs
Normal 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;
|
||||||
|
}
|
@ -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
|
||||||
|
|
||||||
|
@ -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`.
|
||||||
|
Loading…
Reference in New Issue
Block a user