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