diff options
author | Jakub Jelinek <jakub@redhat.com> | 2014-04-24 23:20:28 +0200 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2014-04-24 23:20:28 +0200 |
commit | 42056eaced812253def2d3be64b755a998c8f830 (patch) | |
tree | eca87031145bd4f31013353e8d6e18d6304def16 /gcc/c | |
parent | f7468577f88cbfe33e0a5e9a2104a32f7e45c44f (diff) | |
download | gcc-42056eaced812253def2d3be64b755a998c8f830.tar.gz |
c-parser.c (c_parser_omp_atomic): Allow seq_cst before atomic-clause...
gcc/c/
* c-parser.c (c_parser_omp_atomic): Allow seq_cst before
atomic-clause, allow comma in between atomic-clause and
seq_cst.
gcc/cp/
* parser.c (cp_parser_omp_atomic): Allow seq_cst before
atomic-clause, allow comma in between atomic-clause and
seq_cst.
gcc/testsuite/
* c-c++-common/gomp/atomic-16.c: Remove all dg-error directives.
Replace load with read and store with write.
libgomp/
* testsuite/libgomp.c++/atomic-14.C: Allow seq_cst and
atomic type clauses in any order and optional comma in between.
* testsuite/libgomp.c++/atomic-15.C: Likewise.
* testsuite/libgomp.c/atomic-17.c: Likewise.
From-SVN: r209762
Diffstat (limited to 'gcc/c')
-rw-r--r-- | gcc/c/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/c/c-parser.c | 30 |
2 files changed, 31 insertions, 5 deletions
diff --git a/gcc/c/ChangeLog b/gcc/c/ChangeLog index 2d182f354d5..3ee2594afd6 100644 --- a/gcc/c/ChangeLog +++ b/gcc/c/ChangeLog @@ -1,3 +1,9 @@ +2014-04-24 Jakub Jelinek <jakub@redhat.com> + + * c-parser.c (c_parser_omp_atomic): Allow seq_cst before + atomic-clause, allow comma in between atomic-clause and + seq_cst. + 2014-04-22 Jakub Jelinek <jakub@redhat.com> PR c/59073 diff --git a/gcc/c/c-parser.c b/gcc/c/c-parser.c index 0deab840456..6eb235c5c43 100644 --- a/gcc/c/c-parser.c +++ b/gcc/c/c-parser.c @@ -11198,6 +11198,18 @@ c_parser_omp_atomic (location_t loc, c_parser *parser) if (c_parser_next_token_is (parser, CPP_NAME)) { const char *p = IDENTIFIER_POINTER (c_parser_peek_token (parser)->value); + if (!strcmp (p, "seq_cst")) + { + seq_cst = true; + c_parser_consume_token (parser); + if (c_parser_next_token_is (parser, CPP_COMMA) + && c_parser_peek_2nd_token (parser)->type == CPP_NAME) + c_parser_consume_token (parser); + } + } + if (c_parser_next_token_is (parser, CPP_NAME)) + { + const char *p = IDENTIFIER_POINTER (c_parser_peek_token (parser)->value); if (!strcmp (p, "read")) code = OMP_ATOMIC_READ; @@ -11212,13 +11224,21 @@ c_parser_omp_atomic (location_t loc, c_parser *parser) if (p) c_parser_consume_token (parser); } - if (c_parser_next_token_is (parser, CPP_NAME)) + if (!seq_cst) { - const char *p = IDENTIFIER_POINTER (c_parser_peek_token (parser)->value); - if (!strcmp (p, "seq_cst")) + if (c_parser_next_token_is (parser, CPP_COMMA) + && c_parser_peek_2nd_token (parser)->type == CPP_NAME) + c_parser_consume_token (parser); + + if (c_parser_next_token_is (parser, CPP_NAME)) { - seq_cst = true; - c_parser_consume_token (parser); + const char *p + = IDENTIFIER_POINTER (c_parser_peek_token (parser)->value); + if (!strcmp (p, "seq_cst")) + { + seq_cst = true; + c_parser_consume_token (parser); + } } } c_parser_skip_to_pragma_eol (parser); |