From: Owen Avery <powerboat9.ga...@gmail.com>

gcc/rust/ChangeLog:

        * parse/rust-parse-impl.h
        (Parser::parse_attr_input): Handle more delimeter tokens and the
        END_OF_FILE token.
        (Parser::skip_after_end_attribute): Handle the END_OF_FILE
        token.

gcc/testsuite/ChangeLog:

        * rust/compile/macros/mbe/meta-param.rs: New test.

Signed-off-by: Owen Avery <powerboat9.ga...@gmail.com>
---
 gcc/rust/parse/rust-parse-impl.h                    | 5 ++++-
 gcc/testsuite/rust/compile/macros/mbe/meta-param.rs | 7 +++++++
 2 files changed, 11 insertions(+), 1 deletion(-)
 create mode 100644 gcc/testsuite/rust/compile/macros/mbe/meta-param.rs

diff --git a/gcc/rust/parse/rust-parse-impl.h b/gcc/rust/parse/rust-parse-impl.h
index a0af8a3ac19..3a2fcd21474 100644
--- a/gcc/rust/parse/rust-parse-impl.h
+++ b/gcc/rust/parse/rust-parse-impl.h
@@ -877,7 +877,10 @@ Parser<ManagedTokenSource>::parse_attr_input ()
        return attr_input_lit;
       }
       break;
+    case RIGHT_PAREN:
     case RIGHT_SQUARE:
+    case RIGHT_CURLY:
+    case END_OF_FILE:
       // means AttrInput is missing, which is allowed
       return nullptr;
     default:
@@ -11911,7 +11914,7 @@ Parser<ManagedTokenSource>::skip_after_end_attribute ()
 {
   const_TokenPtr t = lexer.peek_token ();
 
-  while (t->get_id () != RIGHT_SQUARE)
+  while (t->get_id () != RIGHT_SQUARE && t->get_id () != END_OF_FILE)
     {
       lexer.skip_token ();
       t = lexer.peek_token ();
diff --git a/gcc/testsuite/rust/compile/macros/mbe/meta-param.rs 
b/gcc/testsuite/rust/compile/macros/mbe/meta-param.rs
new file mode 100644
index 00000000000..ed6e100e5fd
--- /dev/null
+++ b/gcc/testsuite/rust/compile/macros/mbe/meta-param.rs
@@ -0,0 +1,7 @@
+macro_rules! foo {
+    ($x:meta) => {0}
+}
+
+pub fn main() -> i32 {
+    foo!(Clone)
+}
-- 
2.49.0

Reply via email to