On Fri, 2 Sep 2011, Artem Shinkarov wrote:
> + /* Avoid C_MAYBE_CONST_EXPRs inside VEC_SHUFFLE_EXPR. */
> + tmp = c_fully_fold (v0, false, &maybe_const);
> + v0 = save_expr (tmp);
> + wrap &= maybe_const;
I suppose you need this save_expr because of the two-argument case, but
shouldn't need it otherwise.
> + if (!two_arguments)
> + {
> + tmp = c_fully_fold (v1, false, &maybe_const);
> + v1 = save_expr (tmp);
And you shouldn't need this save_expr at all.
> + tmp = c_fully_fold (mask, false, &maybe_const);
> + mask = save_expr (tmp);
Or this one.
> +/* Helper function to read arguments of builtins which are interfaces
> + for the middle-end nodes like COMPLEX_EXPR, VEC_SHUFLE_EXPR and
Spelling of SHUFFLE.
> + others. The name of the builtin is passed using BNAME parameter.
Two spaces after ".".
> + Function returns true if there were no errors while parsing and
> + stores the arguments in EXPR_LIST*/
". " at end of comment.
> +static bool
> +c_parser_get_builtin_args (c_parser * parser, const char * bname,
> + VEC(tree,gc) ** expr_list)
No spaces after "*".
> + if (c_parser_next_token_is_not (parser, CPP_OPEN_PAREN))
> + {
> + error_at (loc, "cannot take address of %<%s%>", bname);
%qs is a simpler form of %<%s%>.
> @@ -6461,6 +6500,35 @@ c_parser_postfix_expression (c_parser *p
Should also convert __builtin_choose_expr and __builtin_complex to use the
new helper.
> + if (! c_parser_get_builtin_args (parser,
No space after "!".
> + {
> + error_at (loc, "%<__builtin_shuffle%> wrong number of
> arguments");
"wrong number of arguments to %<__builtin_shuffle%>".
--
Joseph S. Myers
[email protected]