diff options
| author | Vadim Petrochenkov <vadim.petrochenkov@gmail.com> | 2020-04-04 16:23:43 +0300 |
|---|---|---|
| committer | Mark Rousskov <mark.simulacrum@gmail.com> | 2020-04-17 15:28:43 -0400 |
| commit | 2708486f8947cea7a4cc86a8e512f8265fe85c65 (patch) | |
| tree | 86527f2942f7c24cbcd3239f0b63e51512b1c590 | |
| parent | c1df9f0a835733e979a0adac498be204cc30b850 (diff) | |
| download | rust-2708486f8947cea7a4cc86a8e512f8265fe85c65.tar.gz rust-2708486f8947cea7a4cc86a8e512f8265fe85c65.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 a035461acc6..5f75b99d91b 100644 --- a/src/librustc_expand/mbe/macro_parser.rs +++ b/src/librustc_expand/mbe/macro_parser.rs @@ -762,7 +762,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() {} |
