On Fri, Oct 23, 2015 at 01:17:07PM -0700, Cesar Philippidis wrote:
> Good idea, thanks. This patch also corrects the problems parsing weird
> combinations of num, static and length arguments that you mentioned
> elsewhere.
> 
> Is this OK for trunk?

I'd strongly prefer to see always patches accompanied by testcases.

> +       loc = c_parser_peek_token (parser)->location;
> +       op_to_parse = &op0;
> +
> +       if ((c_parser_next_token_is (parser, CPP_NAME)
> +            || c_parser_next_token_is (parser, CPP_KEYWORD))
> +           && c_parser_peek_2nd_token (parser)->type == CPP_COLON)
> +         {
> +           tree name_kind = c_parser_peek_token (parser)->value;
> +           const char *p = IDENTIFIER_POINTER (name_kind);

I think I'd prefer not to peek at this at all if it is RID_STATIC,
so perhaps just have (and name_kind is weird):
              else
                {
                  tree val = c_parser_peek_token (parser)->value;
                  if (strcmp (id, IDENTIFIER_POINTER (val)) == 0)
                    {
                      c_parser_consume_token (parser);  /* id  */
                      c_parser_consume_token (parser);  /* ':'  */
                    }
                  else
                    {
...
                    }
                }
?

> +           if (kind == OMP_CLAUSE_GANG
> +               && c_parser_next_token_is_keyword (parser, RID_STATIC))
> +             {
> +               c_parser_consume_token (parser); /* static  */
> +               c_parser_consume_token (parser); /* ':'  */
> +
> +               op_to_parse = &op1;
> +               if (c_parser_next_token_is (parser, CPP_MULT))
> +                 {
> +                   c_parser_consume_token (parser);
> +                   *op_to_parse = integer_minus_one_node;
> +
> +                   /* Consume a comma if present.  */
> +                   if (c_parser_next_token_is (parser, CPP_COMMA))
> +                     c_parser_consume_token (parser);

Doesn't this mean that you happily parse
gang (static: * abc)
or
gang (static:*num:1)
etc.?  I'd say the comma should be non-optional (i.e. either accept
CPP_COMMA, or CPP_CLOSE_PARENT, but nothing else) in that case (at least,
when in OpenMP grammar something is *-list it is meant to be comma
separated).

> +       /* Consume a comma if present.  */
> +       if (c_parser_next_token_is (parser, CPP_COMMA))
> +         c_parser_consume_token (parser);

Similarly this means
gang (num: 5 static: *)
is accepted.  If it is valid, then again it should have testsuite coverage.

        Jakub

Reply via email to