about summary refs log tree commit diff
diff options
context:
space:
mode:
authorVadim Petrochenkov <vadim.petrochenkov@gmail.com>2020-04-04 16:23:43 +0300
committerVadim Petrochenkov <vadim.petrochenkov@gmail.com>2020-04-04 16:23:43 +0300
commit106b30e86989cb4f201ef7a1b7fac7150b662b92 (patch)
treee4f9d6c6a21a6499737d9429ec3f09670c05ae21
parent49dc2f9f091748beb1a8a9d5b3eb3bbe7362c3bd (diff)
downloadrust-106b30e86989cb4f201ef7a1b7fac7150b662b92.tar.gz
rust-106b30e86989cb4f201ef7a1b7fac7150b662b92.zip
macro_rules: `NtLifetime` cannot start with an identifier
-rw-r--r--src/librustc_expand/mbe/macro_parser.rs2
-rw-r--r--src/test/ui/macros/issue-70446.rs13
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() {}