// Edition-specific keywords reserved for future use.
(55, Async, "async") // >= 2018 Edition Only
- (56, Proc, "proc") // <= 2015 Edition Only
// Special lifetime names
- (57, UnderscoreLifetime, "'_")
- (58, StaticLifetime, "'static")
+ (56, UnderscoreLifetime, "'_")
+ (57, StaticLifetime, "'static")
// Weak keywords, have special meaning only in specific contexts.
- (59, Auto, "auto")
- (60, Catch, "catch")
- (61, Default, "default")
- (62, Dyn, "dyn")
- (63, Union, "union")
+ (58, Auto, "auto")
+ (59, Catch, "catch")
+ (60, Default, "default")
+ (61, Dyn, "dyn")
+ (62, Union, "union")
}
impl Symbol {
- fn is_unused_keyword_2015(self) -> bool {
- self == keywords::Proc.name()
- }
-
fn is_unused_keyword_2018(self) -> bool {
self == keywords::Async.name()
}
pub fn is_unused_keyword(self) -> bool {
// Note: `span.edition()` is relatively expensive, don't call it unless necessary.
self.name >= keywords::Abstract.name() && self.name <= keywords::Yield.name() ||
- self.name.is_unused_keyword_2015() && self.span.edition() == Edition::Edition2015 ||
self.name.is_unused_keyword_2018() && self.span.edition() == Edition::Edition2018
}
#![feature(raw_identifiers)]
-// `async`
#[macro_export]
macro_rules! produces_async {
() => (pub fn async() {})
macro_rules! passes_ident {
($i: ident) => ($i)
}
-
-// `proc`
-#[macro_export]
-macro_rules! produces_proc {
- () => (pub fn proc() {})
-}
-
-#[macro_export]
-macro_rules! produces_proc_raw {
- () => (pub fn r#proc() {})
-}
-
-#[macro_export]
-macro_rules! consumes_proc {
- (proc) => (1)
-}
-
-#[macro_export]
-macro_rules! consumes_proc_raw {
- (r#proc) => (1)
-}
-
-#[macro_export]
-macro_rules! passes_ident {
- ($i: ident) => ($i)
-}
#![feature(raw_identifiers)]
-// `async`
#[macro_export]
macro_rules! produces_async {
() => (pub fn async() {})
macro_rules! passes_ident {
($i: ident) => ($i)
}
-
-// `proc`
-#[macro_export]
-macro_rules! produces_proc {
- () => (pub fn proc() {})
-}
-
-#[macro_export]
-macro_rules! produces_proc_raw {
- () => (pub fn r#proc() {})
-}
-
-#[macro_export]
-macro_rules! consumes_proc {
- (proc) => (1)
-}
-
-#[macro_export]
-macro_rules! consumes_proc_raw {
- (r#proc) => (1)
-}
-
-#[macro_export]
-macro_rules! passes_ident {
- ($i: ident) => ($i)
-}
#[macro_use]
extern crate edition_kw_macro_2015;
-// `async`
pub fn check_async() {
let mut async = 1; // OK
let mut r#async = 1; // OK
produces_async_raw! {} // OK
}
-// `proc`
-pub fn check_proc() {
- // let mut proc = 1; // ERROR, reserved
- let mut r#proc = 1; // OK
-
- r#proc = consumes_proc!(proc); // OK
- // r#proc = consumes_proc!(r#proc); // ERROR, not a match
- // r#proc = consumes_proc_raw!(proc); // ERROR, not a match
- r#proc = consumes_proc_raw!(r#proc); // OK
-
- // if passes_ident!(proc) == 1 {} // ERROR, reserved
- if passes_ident!(r#proc) == 1 {} // OK
- // one_proc::proc(); // ERROR, reserved
- // one_proc::r#proc(); // ERROR, unresolved name
- // two_proc::proc(); // ERROR, reserved
- two_proc::r#proc(); // OK
-}
-
-mod one_proc {
- // produces_proc! {} // ERROR, reserved
-}
-mod two_proc {
- produces_proc_raw! {} // OK
-}
-
fn main() {}
#[macro_use]
extern crate edition_kw_macro_2018;
-// `async`
pub fn check_async() {
let mut async = 1; // OK
let mut r#async = 1; // OK
produces_async_raw! {} // OK
}
-// `proc`
-pub fn check_proc() {
- // let mut proc = 1; // ERROR, reserved
- let mut r#proc = 1; // OK
-
- r#proc = consumes_proc!(proc); // OK
- // r#proc = consumes_proc!(r#proc); // ERROR, not a match
- // r#proc = consumes_proc_raw!(proc); // ERROR, not a match
- r#proc = consumes_proc_raw!(r#proc); // OK
-
- // if passes_ident!(proc) == 1 {} // ERROR, reserved
- if passes_ident!(r#proc) == 1 {} // OK
- // one_proc::proc(); // ERROR, reserved
- one_proc::r#proc(); // OK
- // two_proc::proc(); // ERROR, reserved
- two_proc::r#proc(); // OK
-}
-
-mod one_proc {
- produces_proc! {} // OK
-}
-mod two_proc {
- produces_proc_raw! {} // OK
-}
-
fn main() {}
#[macro_use]
extern crate edition_kw_macro_2015;
-// `async`
pub fn check_async() {
// let mut async = 1; // ERROR, reserved
let mut r#async = 1; // OK
produces_async_raw! {} // OK
}
-// `proc`
-pub fn check_proc() {
- let mut proc = 1; // OK
- let mut r#proc = 1; // OK
-
- r#proc = consumes_proc!(proc); // OK
- // r#proc = consumes_proc!(r#proc); // ERROR, not a match
- // r#proc = consumes_proc_raw!(proc); // ERROR, not a match
- r#proc = consumes_proc_raw!(r#proc); // OK
-
- if passes_ident!(proc) == 1 {} // OK
- if passes_ident!(r#proc) == 1 {} // OK
- // one_proc::proc(); // ERROR, unresolved name
- // one_proc::r#proc(); // ERROR, unresolved name
- two_proc::proc(); // OK
- two_proc::r#proc(); // OK
-}
-
-mod one_proc {
- // produces_proc! {} // ERROR, reserved
-}
-mod two_proc {
- produces_proc_raw! {} // OK
-}
-
fn main() {}
#[macro_use]
extern crate edition_kw_macro_2018;
-// `async`
pub fn check_async() {
// let mut async = 1; // ERROR, reserved
let mut r#async = 1; // OK
produces_async_raw! {} // OK
}
-// `proc`
-pub fn check_proc() {
- let mut proc = 1; // OK
- let mut r#proc = 1; // OK
-
- r#proc = consumes_proc!(proc); // OK
- // r#proc = consumes_proc!(r#proc); // ERROR, not a match
- // r#proc = consumes_proc_raw!(proc); // ERROR, not a match
- r#proc = consumes_proc_raw!(r#proc); // OK
-
- if passes_ident!(proc) == 1 {} // OK
- if passes_ident!(r#proc) == 1 {} // OK
- one_proc::proc(); // OK
- one_proc::r#proc(); // OK
- two_proc::proc(); // OK
- two_proc::r#proc(); // OK
-}
-
-mod one_proc {
- produces_proc! {} // OK
-}
-mod two_proc {
- produces_proc_raw! {} // OK
-}
-
fn main() {}
#![feature(raw_identifiers)]
-// `async`
#[macro_export]
macro_rules! produces_async {
() => (pub fn async() {})
macro_rules! passes_ident {
($i: ident) => ($i)
}
-
-// `proc`
-#[macro_export]
-macro_rules! produces_proc {
- () => (pub fn proc() {})
-}
-
-#[macro_export]
-macro_rules! produces_proc_raw {
- () => (pub fn r#proc() {})
-}
-
-#[macro_export]
-macro_rules! consumes_proc {
- (proc) => (1)
-}
-
-#[macro_export]
-macro_rules! consumes_proc_raw {
- (r#proc) => (1)
-}
-
-#[macro_export]
-macro_rules! passes_ident {
- ($i: ident) => ($i)
-}
#![feature(raw_identifiers)]
-// `async`
#[macro_export]
macro_rules! produces_async {
() => (pub fn async() {})
macro_rules! passes_ident {
($i: ident) => ($i)
}
-
-// `proc`
-#[macro_export]
-macro_rules! produces_proc {
- () => (pub fn proc() {})
-}
-
-#[macro_export]
-macro_rules! produces_proc_raw {
- () => (pub fn r#proc() {})
-}
-
-#[macro_export]
-macro_rules! consumes_proc {
- (proc) => (1)
-}
-
-#[macro_export]
-macro_rules! consumes_proc_raw {
- (r#proc) => (1)
-}
-
-#[macro_export]
-macro_rules! passes_ident {
- ($i: ident) => ($i)
-}
// compile-flags: --edition=2015
// aux-build:edition-kw-macro-2015.rs
+// compile-pass
#![feature(raw_identifiers)]
#[macro_use]
extern crate edition_kw_macro_2015;
-// `async`
mod one_async {
produces_async! {} // OK
}
produces_async_raw! {} // OK
}
-// `proc`
-mod one_proc {
- produces_proc! {} // ERROR expected identifier, found reserved keyword `proc`
-}
-mod two_proc {
- produces_proc_raw! {} // OK
-}
+fn main() {}
+++ /dev/null
-error: expected identifier, found reserved keyword `proc`
- --> $DIR/edition-keywords-2015-2015-expansion.rs:29:5
- |
-LL | produces_proc! {} // ERROR expected identifier, found reserved keyword `proc`
- | ^^^^^^^^^^^^^^^^^ expected identifier, found reserved keyword
- |
- = note: this error originates in a macro outside of the current crate (in Nightly builds, run with -Z external-macro-backtrace for more info)
-
-error: aborting due to previous error
-
#[macro_use]
extern crate edition_kw_macro_2015;
-// `async`
pub fn check_async() {
let mut async = 1; // OK
let mut r#async = 1; // OK
module::async(); // OK
module::r#async(); // OK
}
-
-// `proc`
-pub fn check_proc() {
- let mut proc = 1; //~ ERROR expected identifier, found reserved keyword `proc`
- let mut r#proc = 1; // OK
-
- r#proc = consumes_proc!(proc); // OK
- r#proc = consumes_proc!(r#proc); //~ ERROR no rules expected the token `r#proc`
- r#proc = consumes_proc_raw!(proc); //~ ERROR no rules expected the token `proc`
- r#proc = consumes_proc_raw!(r#proc); // OK
-
- if passes_ident!(proc) == 1 {} //~ ERROR expected expression, found reserved keyword `proc`
- if passes_ident!(r#proc) == 1 {} // OK
- module::proc(); //~ ERROR expected identifier, found reserved keyword `proc`
- module::r#proc(); // OK
-}
-error: expected identifier, found reserved keyword `proc`
- --> $DIR/edition-keywords-2015-2015-parsing.rs:37:13
- |
-LL | let mut proc = 1; //~ ERROR expected identifier, found reserved keyword `proc`
- | ^^^^ expected identifier, found reserved keyword
-
-error: expected identifier, found reserved keyword `proc`
- --> $DIR/edition-keywords-2015-2015-parsing.rs:47:13
- |
-LL | module::proc(); //~ ERROR expected identifier, found reserved keyword `proc`
- | ^^^^ expected identifier, found reserved keyword
-
error: no rules expected the token `r#async`
- --> $DIR/edition-keywords-2015-2015-parsing.rs:25:31
+ --> $DIR/edition-keywords-2015-2015-parsing.rs:24:31
|
LL | r#async = consumes_async!(r#async); //~ ERROR no rules expected the token `r#async`
| ^^^^^^^
error: no rules expected the token `async`
- --> $DIR/edition-keywords-2015-2015-parsing.rs:26:35
+ --> $DIR/edition-keywords-2015-2015-parsing.rs:25:35
|
LL | r#async = consumes_async_raw!(async); //~ ERROR no rules expected the token `async`
| ^^^^^
-error: no rules expected the token `r#proc`
- --> $DIR/edition-keywords-2015-2015-parsing.rs:41:29
- |
-LL | r#proc = consumes_proc!(r#proc); //~ ERROR no rules expected the token `r#proc`
- | ^^^^^^
-
-error: no rules expected the token `proc`
- --> $DIR/edition-keywords-2015-2015-parsing.rs:42:33
- |
-LL | r#proc = consumes_proc_raw!(proc); //~ ERROR no rules expected the token `proc`
- | ^^^^
-
-error: expected expression, found reserved keyword `proc`
- --> $DIR/edition-keywords-2015-2015-parsing.rs:45:22
- |
-LL | if passes_ident!(proc) == 1 {} //~ ERROR expected expression, found reserved keyword `proc`
- | ^^^^ expected expression
-
-error: aborting due to 7 previous errors
+error: aborting due to 2 previous errors
#[macro_use]
extern crate edition_kw_macro_2018;
-// `async`
mod one_async {
produces_async! {} // ERROR expected identifier, found reserved keyword
}
mod two_async {
produces_async_raw! {} // OK
}
-
-// `proc`
-mod one_proc {
- produces_proc! {} // OK
-}
-mod two_proc {
- produces_proc_raw! {} // OK
-}
error: expected identifier, found reserved keyword `async`
- --> $DIR/edition-keywords-2015-2018-expansion.rs:21:5
+ --> $DIR/edition-keywords-2015-2018-expansion.rs:20:5
|
LL | produces_async! {} // ERROR expected identifier, found reserved keyword
| ^^^^^^^^^^^^^^^^^^ expected identifier, found reserved keyword
#[macro_use]
extern crate edition_kw_macro_2018;
-// `async`
pub fn check_async() {
let mut async = 1; // OK
let mut r#async = 1; // OK
module::async(); // OK
module::r#async(); // OK
}
-
-// `proc`
-pub fn check_proc() {
- let mut proc = 1; //~ ERROR expected identifier, found reserved keyword `proc`
- let mut r#proc = 1; // OK
-
- r#proc = consumes_proc!(proc); // OK
- r#proc = consumes_proc!(r#proc); //~ ERROR no rules expected the token `r#proc`
- r#proc = consumes_proc_raw!(proc); //~ ERROR no rules expected the token `proc`
- r#proc = consumes_proc_raw!(r#proc); // OK
-
- if passes_ident!(proc) == 1 {} //~ ERROR expected expression, found reserved keyword `proc`
- if passes_ident!(r#proc) == 1 {} // OK
- module::proc(); //~ ERROR expected identifier, found reserved keyword `proc`
- module::r#proc(); // OK
-}
-error: expected identifier, found reserved keyword `proc`
- --> $DIR/edition-keywords-2015-2018-parsing.rs:37:13
- |
-LL | let mut proc = 1; //~ ERROR expected identifier, found reserved keyword `proc`
- | ^^^^ expected identifier, found reserved keyword
-
-error: expected identifier, found reserved keyword `proc`
- --> $DIR/edition-keywords-2015-2018-parsing.rs:47:13
- |
-LL | module::proc(); //~ ERROR expected identifier, found reserved keyword `proc`
- | ^^^^ expected identifier, found reserved keyword
-
error: no rules expected the token `r#async`
- --> $DIR/edition-keywords-2015-2018-parsing.rs:25:31
+ --> $DIR/edition-keywords-2015-2018-parsing.rs:24:31
|
LL | r#async = consumes_async!(r#async); //~ ERROR no rules expected the token `r#async`
| ^^^^^^^
error: no rules expected the token `async`
- --> $DIR/edition-keywords-2015-2018-parsing.rs:26:35
+ --> $DIR/edition-keywords-2015-2018-parsing.rs:25:35
|
LL | r#async = consumes_async_raw!(async); //~ ERROR no rules expected the token `async`
| ^^^^^
-error: no rules expected the token `r#proc`
- --> $DIR/edition-keywords-2015-2018-parsing.rs:41:29
- |
-LL | r#proc = consumes_proc!(r#proc); //~ ERROR no rules expected the token `r#proc`
- | ^^^^^^
-
-error: no rules expected the token `proc`
- --> $DIR/edition-keywords-2015-2018-parsing.rs:42:33
- |
-LL | r#proc = consumes_proc_raw!(proc); //~ ERROR no rules expected the token `proc`
- | ^^^^
-
-error: expected expression, found reserved keyword `proc`
- --> $DIR/edition-keywords-2015-2018-parsing.rs:45:22
- |
-LL | if passes_ident!(proc) == 1 {} //~ ERROR expected expression, found reserved keyword `proc`
- | ^^^^ expected expression
-
-error: aborting due to 7 previous errors
+error: aborting due to 2 previous errors
// compile-flags: --edition=2018
// aux-build:edition-kw-macro-2015.rs
+// compile-pass
#![feature(raw_identifiers)]
#[macro_use]
extern crate edition_kw_macro_2015;
-// `async`
mod one_async {
produces_async! {} // OK
}
produces_async_raw! {} // OK
}
-// `proc`
-mod one_proc {
- produces_proc! {} // ERROR expected identifier, found reserved keyword
-}
-mod two_proc {
- produces_proc_raw! {} // OK
-}
+fn main() {}
+++ /dev/null
-error: expected identifier, found reserved keyword `proc`
- --> $DIR/edition-keywords-2018-2015-expansion.rs:29:5
- |
-LL | produces_proc! {} // ERROR expected identifier, found reserved keyword
- | ^^^^^^^^^^^^^^^^^ expected identifier, found reserved keyword
- |
- = note: this error originates in a macro outside of the current crate (in Nightly builds, run with -Z external-macro-backtrace for more info)
-
-error: aborting due to previous error
-
#[macro_use]
extern crate edition_kw_macro_2015;
-// `proc`
-pub fn check_proc() {
- let mut proc = 1; // OK
- let mut r#proc = 1; // OK
-
- r#proc = consumes_proc!(proc); // OK
- r#proc = consumes_proc!(r#proc); //~ ERROR no rules expected the token `r#proc`
- r#proc = consumes_proc_raw!(proc); //~ ERROR no rules expected the token `proc`
- r#proc = consumes_proc_raw!(r#proc); // OK
-
- if passes_ident!(proc) == 1 {} // OK
- if passes_ident!(r#proc) == 1 {} // OK
- module::proc(); // OK
- module::r#proc(); // OK
-}
-
-// `async`
pub fn check_async() {
let mut async = 1; //~ ERROR expected identifier, found reserved keyword `async`
let mut r#async = 1; // OK
error: expected identifier, found reserved keyword `async`
- --> $DIR/edition-keywords-2018-2015-parsing.rs:37:13
+ --> $DIR/edition-keywords-2018-2015-parsing.rs:20:13
|
LL | let mut async = 1; //~ ERROR expected identifier, found reserved keyword `async`
| ^^^^^ expected identifier, found reserved keyword
error: expected identifier, found reserved keyword `async`
- --> $DIR/edition-keywords-2018-2015-parsing.rs:47:13
+ --> $DIR/edition-keywords-2018-2015-parsing.rs:30:13
|
LL | module::async(); //~ ERROR expected identifier, found reserved keyword `async`
| ^^^^^ expected identifier, found reserved keyword
-error: no rules expected the token `r#proc`
- --> $DIR/edition-keywords-2018-2015-parsing.rs:25:29
- |
-LL | r#proc = consumes_proc!(r#proc); //~ ERROR no rules expected the token `r#proc`
- | ^^^^^^
-
-error: no rules expected the token `proc`
- --> $DIR/edition-keywords-2018-2015-parsing.rs:26:33
- |
-LL | r#proc = consumes_proc_raw!(proc); //~ ERROR no rules expected the token `proc`
- | ^^^^
-
error: no rules expected the token `r#async`
- --> $DIR/edition-keywords-2018-2015-parsing.rs:41:31
+ --> $DIR/edition-keywords-2018-2015-parsing.rs:24:31
|
LL | r#async = consumes_async!(r#async); //~ ERROR no rules expected the token `r#async`
| ^^^^^^^
error: no rules expected the token `async`
- --> $DIR/edition-keywords-2018-2015-parsing.rs:42:35
+ --> $DIR/edition-keywords-2018-2015-parsing.rs:25:35
|
LL | r#async = consumes_async_raw!(async); //~ ERROR no rules expected the token `async`
| ^^^^^
error: expected expression, found reserved keyword `async`
- --> $DIR/edition-keywords-2018-2015-parsing.rs:45:22
+ --> $DIR/edition-keywords-2018-2015-parsing.rs:28:22
|
LL | if passes_ident!(async) == 1 {} //~ ERROR expected expression, found reserved keyword `async`
| ^^^^^ expected expression
-error: aborting due to 7 previous errors
+error: aborting due to 5 previous errors
#[macro_use]
extern crate edition_kw_macro_2018;
-// `async`
mod one_async {
produces_async! {} // ERROR expected identifier, found reserved keyword `async`
}
mod two_async {
produces_async_raw! {} // OK
}
-
-// `proc`
-mod one_proc {
- produces_proc! {} // OK
-}
-mod two_proc {
- produces_proc_raw! {} // OK
-}
error: expected identifier, found reserved keyword `async`
- --> $DIR/edition-keywords-2018-2018-expansion.rs:21:5
+ --> $DIR/edition-keywords-2018-2018-expansion.rs:20:5
|
LL | produces_async! {} // ERROR expected identifier, found reserved keyword `async`
| ^^^^^^^^^^^^^^^^^^ expected identifier, found reserved keyword
#[macro_use]
extern crate edition_kw_macro_2018;
-// `proc`
-pub fn check_proc() {
- let mut proc = 1; // OK
- let mut r#proc = 1; // OK
-
- r#proc = consumes_proc!(proc); // OK
- r#proc = consumes_proc!(r#proc); //~ ERROR no rules expected the token `r#proc`
- r#proc = consumes_proc_raw!(proc); //~ ERROR no rules expected the token `proc`
- r#proc = consumes_proc_raw!(r#proc); // OK
-
- if passes_ident!(proc) == 1 {} // OK
- if passes_ident!(r#proc) == 1 {} // OK
- module::proc(); // OK
- module::r#proc(); // OK
-}
-
-// `async`
pub fn check_async() {
let mut async = 1; //~ ERROR expected identifier, found reserved keyword `async`
let mut r#async = 1; // OK
error: expected identifier, found reserved keyword `async`
- --> $DIR/edition-keywords-2018-2018-parsing.rs:37:13
+ --> $DIR/edition-keywords-2018-2018-parsing.rs:20:13
|
LL | let mut async = 1; //~ ERROR expected identifier, found reserved keyword `async`
| ^^^^^ expected identifier, found reserved keyword
error: expected identifier, found reserved keyword `async`
- --> $DIR/edition-keywords-2018-2018-parsing.rs:47:13
+ --> $DIR/edition-keywords-2018-2018-parsing.rs:30:13
|
LL | module::async(); //~ ERROR expected identifier, found reserved keyword `async`
| ^^^^^ expected identifier, found reserved keyword
-error: no rules expected the token `r#proc`
- --> $DIR/edition-keywords-2018-2018-parsing.rs:25:29
- |
-LL | r#proc = consumes_proc!(r#proc); //~ ERROR no rules expected the token `r#proc`
- | ^^^^^^
-
-error: no rules expected the token `proc`
- --> $DIR/edition-keywords-2018-2018-parsing.rs:26:33
- |
-LL | r#proc = consumes_proc_raw!(proc); //~ ERROR no rules expected the token `proc`
- | ^^^^
-
error: no rules expected the token `r#async`
- --> $DIR/edition-keywords-2018-2018-parsing.rs:41:31
+ --> $DIR/edition-keywords-2018-2018-parsing.rs:24:31
|
LL | r#async = consumes_async!(r#async); //~ ERROR no rules expected the token `r#async`
| ^^^^^^^
error: no rules expected the token `async`
- --> $DIR/edition-keywords-2018-2018-parsing.rs:42:35
+ --> $DIR/edition-keywords-2018-2018-parsing.rs:25:35
|
LL | r#async = consumes_async_raw!(async); //~ ERROR no rules expected the token `async`
| ^^^^^
error: expected expression, found reserved keyword `async`
- --> $DIR/edition-keywords-2018-2018-parsing.rs:45:22
+ --> $DIR/edition-keywords-2018-2018-parsing.rs:28:22
|
LL | if passes_ident!(async) == 1 {} //~ ERROR expected expression, found reserved keyword `async`
| ^^^^^ expected expression
-error: aborting due to 7 previous errors
+error: aborting due to 5 previous errors