diff options
author | Arthur Cohen <arthur.cohen@embecosm.com> | 2025-04-09 14:42:08 +0200 |
---|---|---|
committer | CohenArthur <arthur.cohen@embecosm.com> | 2025-04-14 08:27:47 +0000 |
commit | 0c6c73c5317111c5ec9cf465b3f6e37fe250a449 (patch) | |
tree | b3cf56bae92eae7d9ca55108296cdc2fd3b7aa60 /gcc/rust | |
parent | 486ca997e9924ad52bee8e4c4a6028fcab5f25b5 (diff) | |
download | gcc-0c6c73c5317111c5ec9cf465b3f6e37fe250a449.zip gcc-0c6c73c5317111c5ec9cf465b3f6e37fe250a449.tar.gz gcc-0c6c73c5317111c5ec9cf465b3f6e37fe250a449.tar.bz2 |
format_args: Allow extraneous commas, improve safety
gcc/rust/ChangeLog:
* expand/rust-macro-builtins-format-args.cc (format_args_parse_arguments): Improve safety,
allow extra commas after end of argument list.
gcc/testsuite/ChangeLog:
* rust/compile/format_args_extra_comma.rs: New test.
Diffstat (limited to 'gcc/rust')
-rw-r--r-- | gcc/rust/expand/rust-macro-builtins-format-args.cc | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/gcc/rust/expand/rust-macro-builtins-format-args.cc b/gcc/rust/expand/rust-macro-builtins-format-args.cc index 3015225..bb01eba 100644 --- a/gcc/rust/expand/rust-macro-builtins-format-args.cc +++ b/gcc/rust/expand/rust-macro-builtins-format-args.cc @@ -55,6 +55,8 @@ format_args_parse_arguments (AST::MacroInvocData &invoc) if (parser.peek_current_token ()->get_id () == STRING_LITERAL) format_expr = parser.parse_literal_expr (); + rust_assert (format_expr); + // TODO(Arthur): Clean this up - if we haven't parsed a string literal but a // macro invocation, what do we do here? return a tl::unexpected? auto format_str = static_cast<AST::LiteralExpr &> (*format_expr) @@ -81,6 +83,11 @@ format_args_parse_arguments (AST::MacroInvocData &invoc) { parser.skip_token (COMMA); + // Check in case of an extraneous comma in the args list, which is + // allowed - format_args!("fmt", arg, arg2,) + if (parser.peek_current_token ()->get_id () == last_token_id) + break; + if (parser.peek_current_token ()->get_id () == IDENTIFIER && parser.peek (1)->get_id () == EQUAL) { |