gccrs: transcriber: Do not infinite loop if the current parsed node is an error
authorArthur Cohen <arthur.cohen@embecosm.com>
Mon, 29 Aug 2022 14:23:51 +0000 (16:23 +0200)
committerArthur Cohen <arthur.cohen@embecosm.com>
Tue, 31 Jan 2023 13:16:50 +0000 (14:16 +0100)
gcc/rust/ChangeLog:

* expand/rust-macro-expand.cc (parse_many): Return early from parsing
loop if we encounter an error, and emit that error in the meantime.

Co-authored-by: philberty <philip.herron@embecosm.com>
gcc/rust/expand/rust-macro-expand.cc

index df258bd..ed1b838 100644 (file)
@@ -731,6 +731,14 @@ parse_many (Parser<MacroInvocLexer> &parser, TokenId &delimiter,
        break;
 
       auto node = parse_fn ();
+      if (node.is_error ())
+       {
+         for (auto err : parser.get_errors ())
+           err.emit_error ();
+
+         return AST::ASTFragment::create_error ();
+       }
+
       nodes.emplace_back (std::move (node));
     }