FreeBSD/contrib/gcc/cp/parser.c
/* OpenMP 2.5:
   variable-list:
     identifier
     variable-list , identifier

   In addition, we match a closing parenthesis.  An opening parenthesis
   will have been consumed by the caller.

   If KIND is nonzero, create the appropriate node and install the decl
   in OMP_CLAUSE_DECL and add the node to the head of the list.

   If KIND is zero, create a TREE_LIST with the decl in TREE_PURPOSE;
   return the list created.  */
OpenMP 2.5:
variable-list:
identifier
variable-list , identifier

In addition, we match a closing parenthesis.  An opening parenthesis
will have been consumed by the caller.

If KIND is nonzero, create the appropriate node and install the decl
in OMP_CLAUSE_DECL and add the node to the head of the list.

If KIND is zero, create a TREE_LIST with the decl in TREE_PURPOSE;
return the list created.
OpenMP 2 . 5 : variable - list : identifier variable - list identifier In addition we match a closing parenthesis . An opening parenthesis will have been consumed by the caller . If KIND is nonzero create the appropriate node and install the decl in OMP_CLAUSE_DECL and add the node to the head of the list . If KIND is zero create a TREE_LIST with the decl in TREE_PURPOSE ; return the list created .
static tree
cp_parser_omp_var_list_no_open (cp_parser *parser, enum omp_clause_code kind,
				tree list)
{
  while (1)
    {
      tree name, decl;
      name = cp_parser_id_expression (parser, false,
				      true,
				      NULL,
				      false,
				      false);
      if (name == error_mark_node)
	goto skip_comma;
      decl = cp_parser_lookup_name_simple (parser, name);
      if (decl == error_mark_node)
	cp_parser_name_lookup_error (parser, name, decl, NULL);
      else if (kind != 0)
	{
	  tree u = build_omp_clause (kind);
	  OMP_CLAUSE_DECL (u) = decl;
	  OMP_CLAUSE_CHAIN (u) = list;
	  list = u;
	}
      else
	list = tree_cons (decl, NULL_TREE, list);
    get_comma:
      if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
	break;
      cp_lexer_consume_token (parser->lexer);
    }
  if (!cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'"))
    {
      int ending;
    skip_comma:
      ending = cp_parser_skip_to_closing_parenthesis (parser,
						      true,
						      true,
						      true);
      if (ending < 0)
	goto get_comma;
    }
  return list;
}
static tree cp_parser_omp_var_list_no_open ( cp_parser * parser , enum omp_clause_code kind , tree list ) { while ( 1 ) { tree name , decl ; name = cp_parser_id_expression ( parser , false , true , NULL , false , false ) ; if ( name == error_mark_node ) goto skip_comma ; decl = cp_parser_lookup_name_simple ( parser , name ) ; if ( decl == error_mark_node ) cp_parser_name_lookup_error ( parser , name , decl , NULL ) ; else if ( kind != 0 ) { tree u = build_omp_clause ( kind ) ; OMP_CLAUSE_DECL ( u ) = decl ; OMP_CLAUSE_CHAIN ( u ) = list ; list = u ; } else list = tree_cons ( decl , NULL_TREE , list ) ; get_comma : if ( cp_lexer_next_token_is_not ( parser -> lexer , CPP_COMMA ) ) break ; cp_lexer_consume_token ( parser -> lexer ) ; } if ( ! cp_parser_require ( parser , CPP_CLOSE_PAREN , " " ) ) { int ending ; skip_comma : ending = cp_parser_skip_to_closing_parenthesis ( parser , true , true , true ) ; if ( ending < 0 ) goto get_comma ; } return list ; }
OpenMP 2.5:
variable-list:
identifier
variable-list , identifier
OpenMP 2 . 5 : variable - list : identifier variable - list identifier
/*template_p=*/ /*check_dependency_p=*/ /*template_p=*/ /*declarator_p=*/ /*optional_p=*/ /* Try to resync to an unnested comma.  Copied from
	 cp_parser_parenthesized_expression_list.  */ /*recovering=*/ /*or_comma=*/ /*consume_paren=*/