aboutsummaryrefslogtreecommitdiff
path: root/gcc/c
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2019-10-14 08:52:46 +0200
committerJakub Jelinek <jakub@gcc.gnu.org>2019-10-14 08:52:46 +0200
commitb9424661f58de6c0aa9dc4c855c1fd913cc06282 (patch)
tree3a68fda9b91c308cf0facc6af4dd010531cb86b5 /gcc/c
parentdede82f21ba8b569ad0f5538a0c00216ea71d2b4 (diff)
downloadgcc-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/ChangeLog8
-rw-r--r--gcc/c/c-parser.c24
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,