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
committerMark Rousskov <mark.simulacrum@gmail.com>2020-04-17 15:28:43 -0400
commit2708486f8947cea7a4cc86a8e512f8265fe85c65 (patch)
tree86527f2942f7c24cbcd3239f0b63e51512b1c590
parentc1df9f0a835733e979a0adac498be204cc30b850 (diff)
downloadrust-2708486f8947cea7a4cc86a8e512f8265fe85c65.tar.gz
rust-2708486f8947cea7a4cc86a8e512f8265fe85c65.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 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() {}