On 1/21/25 1:02 PM, Jakub Jelinek wrote:
On Tue, Jan 21, 2025 at 06:47:53PM +0100, Jakub Jelinek wrote:
Indeed, I've just used what it was doing without thinking too much about it,
sorry.
addl_args = tree_cons (NULL_TREE, arg, addl_args);
with addl_args = nreverse (addl_args); after the loop might be better,
can test that incrementally.  sel_args is handled the same and should have
the same treatment.

Here is incremental patch to do that.

So far verified on the 2 va-meth*.mm testcases (one without CPP_EMBED, one
with) that -fdump-tree-gimple is the same before/after the patch.

Ok for trunk if it passes bootstrap/regtest (or defer for GCC 16?)?

OK.

2025-01-21  Jakub Jelinek  <ja...@redhat.com>

        * parser.cc (cp_parser_objc_message_args): Use tree_cons with
        nreverse at the end for both sel_args and addl_args, instead of
        chainon with build_tree_list second argument.

--- gcc/cp/parser.cc.jj 2025-01-21 18:49:42.478969570 +0100
+++ gcc/cp/parser.cc    2025-01-21 18:52:19.035786901 +0100
@@ -36724,9 +36724,7 @@ cp_parser_objc_message_args (cp_parser*
        cp_parser_require (parser, CPP_COLON, RT_COLON);
        arg = cp_parser_assignment_expression (parser);
- sel_args
-       = chainon (sel_args,
-                  build_tree_list (selector, arg));
+      sel_args = tree_cons (selector, arg, sel_args);
token = cp_lexer_peek_token (parser->lexer);
      }
@@ -36741,14 +36739,12 @@ cp_parser_objc_message_args (cp_parser*
          tree raw_data = cp_lexer_peek_token (parser->lexer)->u.value;
          cp_lexer_consume_token (parser->lexer);
          for (tree argument : raw_data_range (raw_data))
-           addl_args = chainon (addl_args,
-                                build_tree_list (NULL_TREE, argument));
+           addl_args = tree_cons (NULL_TREE, argument, addl_args);
        }
        else
        {
          tree arg = cp_parser_assignment_expression (parser);
-         addl_args = chainon (addl_args,
-                              build_tree_list (NULL_TREE, arg));
+         addl_args = tree_cons (NULL_TREE, arg, addl_args);
        }
token = cp_lexer_peek_token (parser->lexer);
@@ -36760,7 +36756,7 @@ cp_parser_objc_message_args (cp_parser*
        return build_tree_list (error_mark_node, error_mark_node);
      }
- return build_tree_list (sel_args, addl_args);
+  return build_tree_list (nreverse (sel_args), nreverse (addl_args));
  }
/* Parse an Objective-C encode expression.


        Jakub


Reply via email to