diff options
| author | Vadim Petrochenkov <vadim.petrochenkov@gmail.com> | 2020-04-04 16:23:43 +0300 |
|---|---|---|
| committer | Vadim Petrochenkov <vadim.petrochenkov@gmail.com> | 2020-04-04 16:23:43 +0300 |
| commit | 106b30e86989cb4f201ef7a1b7fac7150b662b92 (patch) | |
| tree | e4f9d6c6a21a6499737d9429ec3f09670c05ae21 | |
| parent | 49dc2f9f091748beb1a8a9d5b3eb3bbe7362c3bd (diff) | |
| download | rust-106b30e86989cb4f201ef7a1b7fac7150b662b92.tar.gz rust-106b30e86989cb4f201ef7a1b7fac7150b662b92.zip | |
macro_rules: `NtLifetime` cannot start with an identifier
| -rw-r--r-- | src/librustc_expand/mbe/macro_parser.rs | 2 | ||||
| -rw-r--r-- | src/test/ui/macros/issue-70446.rs | 13 |
2 files changed, 14 insertions, 1 deletions
diff --git a/src/librustc_expand/mbe/macro_parser.rs b/src/librustc_expand/mbe/macro_parser.rs index e868b7e36aa..5fb800972c7 100644 --- a/src/librustc_expand/mbe/macro_parser.rs +++ b/src/librustc_expand/mbe/macro_parser.rs @@ -768,7 +768,7 @@ fn may_begin_with(token: &Token, name: Name) -> bool { /// Checks whether the non-terminal may contain a single (non-keyword) identifier. fn may_be_ident(nt: &token::Nonterminal) -> bool { match *nt { - token::NtItem(_) | token::NtBlock(_) | token::NtVis(_) => false, + token::NtItem(_) | token::NtBlock(_) | token::NtVis(_) | token::NtLifetime(_) => false, _ => true, } } diff --git a/src/test/ui/macros/issue-70446.rs b/src/test/ui/macros/issue-70446.rs new file mode 100644 index 00000000000..407094d55ff --- /dev/null +++ b/src/test/ui/macros/issue-70446.rs @@ -0,0 +1,13 @@ +// check-pass + +macro_rules! foo { + ($(: $p:path)? $(: $l:lifetime)? ) => { bar! {$(: $p)? $(: $l)? } }; +} + +macro_rules! bar { + ($(: $p:path)? $(: $l:lifetime)? ) => {}; +} + +foo! {: 'a } + +fn main() {} |
