diff options
author | Jakub Jelinek <jakub@redhat.com> | 2019-10-14 08:52:46 +0200 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2019-10-14 08:52:46 +0200 |
commit | b9424661f58de6c0aa9dc4c855c1fd913cc06282 (patch) | |
tree | 3a68fda9b91c308cf0facc6af4dd010531cb86b5 /gcc/c | |
parent | dede82f21ba8b569ad0f5538a0c00216ea71d2b4 (diff) | |
download | gcc-b9424661f58de6c0aa9dc4c855c1fd913cc06282.zip gcc-b9424661f58de6c0aa9dc4c855c1fd913cc06282.tar.gz gcc-b9424661f58de6c0aa9dc4c855c1fd913cc06282.tar.bz2 |
c-parser.c (c_parser_omp_all_clauses): Change bool NESTED_P argument into int NESTED...
c/
* c-parser.c (c_parser_omp_all_clauses): Change bool NESTED_P argument
into int NESTED, if it is 2, diagnose missing commas in between
clauses.
(c_parser_omp_context_selector): Pass 2 as last argument to
c_parser_omp_all_clauses.
cp/
* parser.c (cp_parser_omp_all_clauses): Change bool NESTED_P argument
into int NESTED, if it is 2, diagnose missing commas in between
clauses.
(cp_parser_omp_context_selector): Pass 2 as last argument to
cp_parser_omp_all_clauses.
testsuite/
* c-c++-common/gomp/declare-variant-7.c: Add tests for clauses not
separated by commas in simd selector trait properties.
From-SVN: r276950
Diffstat (limited to 'gcc/c')
-rw-r--r-- | gcc/c/ChangeLog | 8 | ||||
-rw-r--r-- | gcc/c/c-parser.c | 24 |
2 files changed, 24 insertions, 8 deletions
diff --git a/gcc/c/ChangeLog b/gcc/c/ChangeLog index 5fb386c..c76baf0 100644 --- a/gcc/c/ChangeLog +++ b/gcc/c/ChangeLog @@ -1,3 +1,11 @@ +2019-10-14 Jakub Jelinek <jakub@redhat.com> + + * c-parser.c (c_parser_omp_all_clauses): Change bool NESTED_P argument + into int NESTED, if it is 2, diagnose missing commas in between + clauses. + (c_parser_omp_context_selector): Pass 2 as last argument to + c_parser_omp_all_clauses. + 2019-10-12 Jakub Jelinek <jakub@redhat.com> * c-parser.c (c_parser_omp_context_selector): Improve error recovery. diff --git a/gcc/c/c-parser.c b/gcc/c/c-parser.c index 9d0b2b6..15095dd 100644 --- a/gcc/c/c-parser.c +++ b/gcc/c/c-parser.c @@ -15215,13 +15215,14 @@ c_parser_oacc_all_clauses (c_parser *parser, omp_clause_mask mask, /* Parse all OpenMP clauses. The set clauses allowed by the directive is a bitmask in MASK. Return the list of clauses found. FINISH_P set if c_finish_omp_clauses should be called. - NESTED_P set if clauses should be terminated by closing paren instead - of end of pragma. */ + NESTED non-zero if clauses should be terminated by closing paren instead + of end of pragma. If it is 2, additionally commas are required in between + the clauses. */ static tree c_parser_omp_all_clauses (c_parser *parser, omp_clause_mask mask, const char *where, bool finish_p = true, - bool nested_p = false) + int nested = 0) { tree clauses = NULL; bool first = true; @@ -15233,11 +15234,18 @@ c_parser_omp_all_clauses (c_parser *parser, omp_clause_mask mask, const char *c_name; tree prev = clauses; - if (nested_p && c_parser_next_token_is (parser, CPP_CLOSE_PAREN)) + if (nested && c_parser_next_token_is (parser, CPP_CLOSE_PAREN)) break; - if (!first && c_parser_next_token_is (parser, CPP_COMMA)) - c_parser_consume_token (parser); + if (!first) + { + if (c_parser_next_token_is (parser, CPP_COMMA)) + c_parser_consume_token (parser); + else if (nested == 2) + error_at (c_parser_peek_token (parser)->location, + "clauses in %<simd%> trait should be separated " + "by %<,%>"); + } here = c_parser_peek_token (parser)->location; c_kind = c_parser_omp_clause_name (parser); @@ -15520,7 +15528,7 @@ c_parser_omp_all_clauses (c_parser *parser, omp_clause_mask mask, } saw_error: - if (!nested_p) + if (!nested) c_parser_skip_to_pragma_eol (parser); if (finish_p) @@ -19279,7 +19287,7 @@ c_parser_omp_context_selector (c_parser *parser, tree set, tree parms) tree c; c = c_parser_omp_all_clauses (parser, OMP_DECLARE_SIMD_CLAUSE_MASK, - "simd", true, true); + "simd", true, 2); c = c_omp_declare_simd_clauses_to_numbers (parms == error_mark_node ? NULL_TREE : parms, |