+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
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;
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);
+2014-04-24 Jakub Jelinek <jakub@redhat.com>
+
+ * parser.c (cp_parser_omp_atomic): Allow seq_cst before
+ atomic-clause, allow comma in between atomic-clause and
+ seq_cst.
+
2014-04-24 Marc Glisse <marc.glisse@inria.fr>
PR libstdc++/43622
tree id = cp_lexer_peek_token (parser->lexer)->u.value;
const char *p = IDENTIFIER_POINTER (id);
+ if (!strcmp (p, "seq_cst"))
+ {
+ seq_cst = true;
+ cp_lexer_consume_token (parser->lexer);
+ if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA)
+ && cp_lexer_peek_nth_token (parser->lexer, 2)->type == CPP_NAME)
+ cp_lexer_consume_token (parser->lexer);
+ }
+ }
+ if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
+ {
+ tree id = cp_lexer_peek_token (parser->lexer)->u.value;
+ const char *p = IDENTIFIER_POINTER (id);
+
if (!strcmp (p, "read"))
code = OMP_ATOMIC_READ;
else if (!strcmp (p, "write"))
if (p)
cp_lexer_consume_token (parser->lexer);
}
-
- if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
+ if (!seq_cst)
{
- tree id = cp_lexer_peek_token (parser->lexer)->u.value;
- const char *p = IDENTIFIER_POINTER (id);
+ if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA)
+ && cp_lexer_peek_nth_token (parser->lexer, 2)->type == CPP_NAME)
+ cp_lexer_consume_token (parser->lexer);
- if (!strcmp (p, "seq_cst"))
+ if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
{
- seq_cst = true;
- cp_lexer_consume_token (parser->lexer);
+ tree id = cp_lexer_peek_token (parser->lexer)->u.value;
+ const char *p = IDENTIFIER_POINTER (id);
+
+ if (!strcmp (p, "seq_cst"))
+ {
+ seq_cst = true;
+ cp_lexer_consume_token (parser->lexer);
+ }
}
}
cp_parser_require_pragma_eol (parser, pragma_tok);
+2014-04-24 Jakub Jelinek <jakub@redhat.com>
+
+ * c-c++-common/gomp/atomic-16.c: Remove all dg-error directives.
+ Replace load with read and store with write.
+
2014-04-24 Jeff Law <law@redhat.com>
PR target/60822
foo ()
{
int v;
- #pragma omp atomic seq_cst load /* { dg-error "expected end of line" } */
- v = x; /* { dg-error "invalid form" } */
- #pragma omp atomic seq_cst, load /* { dg-error "expected end of line" } */
- v = x; /* { dg-error "invalid form" } */
- #pragma omp atomic seq_cst store /* { dg-error "expected end of line" } */
- x = v; /* { dg-error "invalid form" } */
- #pragma omp atomic seq_cst ,store /* { dg-error "expected end of line" } */
- x = v; /* { dg-error "invalid form" } */
- #pragma omp atomic seq_cst update /* { dg-error "expected end of line" } */
+ #pragma omp atomic seq_cst read
+ v = x;
+ #pragma omp atomic seq_cst, read
+ v = x;
+ #pragma omp atomic seq_cst write
+ x = v;
+ #pragma omp atomic seq_cst ,write
+ x = v;
+ #pragma omp atomic seq_cst update
x += v;
- #pragma omp atomic seq_cst , update /* { dg-error "expected end of line" } */
+ #pragma omp atomic seq_cst , update
x += v;
- #pragma omp atomic seq_cst capture /* { dg-error "expected end of line" } */
- v = x += 2; /* { dg-error "invalid form" } */
- #pragma omp atomic seq_cst, capture /* { dg-error "expected end of line" } */
- v = x += 2; /* { dg-error "invalid form" } */
- #pragma omp atomic load , seq_cst /* { dg-error "expected end of line" } */
- v = x; /* { dg-error "invalid form" } */
- #pragma omp atomic store ,seq_cst /* { dg-error "expected end of line" } */
- x = v; /* { dg-error "invalid form" } */
- #pragma omp atomic update, seq_cst /* { dg-error "expected end of line" } */
+ #pragma omp atomic seq_cst capture
+ v = x += 2;
+ #pragma omp atomic seq_cst, capture
+ v = x += 2;
+ #pragma omp atomic read , seq_cst
+ v = x;
+ #pragma omp atomic write ,seq_cst
+ x = v;
+ #pragma omp atomic update, seq_cst
x += v;
- #pragma omp atomic capture, seq_cst /* { dg-error "expected end of line" } */
+ #pragma omp atomic capture, seq_cst
v = x += 2;
}
2014-04-24 Jakub Jelinek <jakub@redhat.com>
+ * 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.
+
* testsuite/libgomp.c/simd-7.c: New test.
* testsuite/libgomp.c/simd-8.c: New test.
* testsuite/libgomp.c/simd-9.c: New test.
v = x;
if (v != 3)
abort ();
- #pragma omp atomic update seq_cst
+ #pragma omp atomic seq_cst update
x = 3 * 2 * 1 + x;
- #pragma omp atomic read seq_cst
+ #pragma omp atomic read, seq_cst
v = x;
if (v != 9)
abort ();
- #pragma omp atomic capture seq_cst
+ #pragma omp atomic seq_cst, capture
v = x = x | 16;
if (v != 25)
abort ();
v = x = x + 14 * 2 / 4;
if (v != 32)
abort ();
- #pragma omp atomic capture seq_cst
+ #pragma omp atomic seq_cst capture
v = x = 5 | x;
if (v != 37)
abort ();
- #pragma omp atomic capture seq_cst
+ #pragma omp atomic capture, seq_cst
v = x = 40 + 12 - 2 - 7 - x;
if (v != 6)
abort ();
- #pragma omp atomic read seq_cst
+ #pragma omp atomic seq_cst read
v = x;
if (v != 6)
abort ();
{ v = x; x = 3 + x; }
if (v != 6)
abort ();
- #pragma omp atomic capture seq_cst
+ #pragma omp atomic seq_cst capture
{ v = x; x = -1 * -1 * -1 * -1 - x; }
if (v != 9)
abort ();
v = x;
if (v != -8)
abort ();
- #pragma omp atomic capture seq_cst
+ #pragma omp atomic capture, seq_cst
{ x = 2 * 2 - x; v = x; }
if (v != 12)
abort ();
- #pragma omp atomic capture seq_cst
+ #pragma omp atomic seq_cst capture
{ x = 7 & x; v = x; }
if (v != 4)
abort ();
{ v = x; x = 6; }
if (v != 4)
abort ();
- #pragma omp atomic read seq_cst
+ #pragma omp atomic read, seq_cst
v = x;
if (v != 6)
abort ();
{ v = x; x = 7 * 8 + 23; }
if (v != 6)
abort ();
- #pragma omp atomic read seq_cst
+ #pragma omp atomic seq_cst, read
v = x;
if (v != 79)
abort ();
- #pragma omp atomic capture seq_cst
+ #pragma omp atomic capture , seq_cst
{ v = x; x = 23 + 6 * 4; }
if (v != 79)
abort ();
v = x;
if (v != 47)
abort ();
- #pragma omp atomic capture seq_cst
+ #pragma omp atomic seq_cst capture
{ v = x; x = l ? 17 : 12; }
if (v != 47)
abort ();
v = x;
if (v != 3)
abort ();
- #pragma omp atomic update seq_cst
+ #pragma omp atomic seq_cst update
x = 3 * 2 * 1 + x;
- #pragma omp atomic read seq_cst
+ #pragma omp atomic read, seq_cst
v = x;
if (v != 9)
abort ();
- #pragma omp atomic capture seq_cst
+ #pragma omp atomic seq_cst, capture
v = x = x | 16;
if (v != 25)
abort ();
v = x = x + 14 * 2 / 4;
if (v != 32)
abort ();
- #pragma omp atomic capture seq_cst
+ #pragma omp atomic seq_cst capture
v = x = 5 | x;
if (v != 37)
abort ();
- #pragma omp atomic capture seq_cst
+ #pragma omp atomic capture, seq_cst
v = x = 40 + 12 - 2 - 7 - x;
if (v != 6)
abort ();
- #pragma omp atomic read seq_cst
+ #pragma omp atomic seq_cst read
v = x;
if (v != 6)
abort ();
{ v = x; x = 3 + x; }
if (v != 6)
abort ();
- #pragma omp atomic capture seq_cst
+ #pragma omp atomic seq_cst capture
{ v = x; x = -1 * -1 * -1 * -1 - x; }
if (v != 9)
abort ();
v = x;
if (v != -8)
abort ();
- #pragma omp atomic capture seq_cst
+ #pragma omp atomic capture, seq_cst
{ x = 2 * 2 - x; v = x; }
if (v != 12)
abort ();
- #pragma omp atomic capture seq_cst
+ #pragma omp atomic seq_cst capture
{ x = 7 & x; v = x; }
if (v != 4)
abort ();
{ v = x; x = 6; }
if (v != 4)
abort ();
- #pragma omp atomic read seq_cst
+ #pragma omp atomic read, seq_cst
v = x;
if (v != 6)
abort ();
{ v = x; x = 7 * 8 + 23; }
if (v != 6)
abort ();
- #pragma omp atomic read seq_cst
+ #pragma omp atomic seq_cst, read
v = x;
if (v != 79)
abort ();
- #pragma omp atomic capture seq_cst
+ #pragma omp atomic capture , seq_cst
{ v = x; x = 23 + 6 * 4; }
if (v != 79)
abort ();
v = x;
if (v != 47)
abort ();
- #pragma omp atomic capture seq_cst
+ #pragma omp atomic seq_cst capture
{ v = x; x = l ? 17 : 12; }
if (v != 47)
abort ();
v = x;
if (v != 3)
abort ();
- #pragma omp atomic update seq_cst
+ #pragma omp atomic seq_cst update
x = 3 * 2 * 1 + x;
- #pragma omp atomic read seq_cst
+ #pragma omp atomic read, seq_cst
v = x;
if (v != 9)
abort ();
- #pragma omp atomic capture seq_cst
+ #pragma omp atomic seq_cst, capture
v = x = x | 16;
if (v != 25)
abort ();
v = x = x + 14 * 2 / 4;
if (v != 32)
abort ();
- #pragma omp atomic capture seq_cst
+ #pragma omp atomic seq_cst capture
v = x = 5 | x;
if (v != 37)
abort ();
- #pragma omp atomic capture seq_cst
+ #pragma omp atomic capture, seq_cst
v = x = 40 + 12 - 2 - 7 - x;
if (v != 6)
abort ();
- #pragma omp atomic read seq_cst
+ #pragma omp atomic seq_cst read
v = x;
if (v != 6)
abort ();
{ v = x; x = 3 + x; }
if (v != 6)
abort ();
- #pragma omp atomic capture seq_cst
+ #pragma omp atomic seq_cst capture
{ v = x; x = -1 * -1 * -1 * -1 - x; }
if (v != 9)
abort ();
v = x;
if (v != -8)
abort ();
- #pragma omp atomic capture seq_cst
+ #pragma omp atomic capture, seq_cst
{ x = 2 * 2 - x; v = x; }
if (v != 12)
abort ();
- #pragma omp atomic capture seq_cst
+ #pragma omp atomic seq_cst capture
{ x = 7 & x; v = x; }
if (v != 4)
abort ();
{ v = x; x = 6; }
if (v != 4)
abort ();
- #pragma omp atomic read seq_cst
+ #pragma omp atomic read, seq_cst
v = x;
if (v != 6)
abort ();
{ v = x; x = 7 * 8 + 23; }
if (v != 6)
abort ();
- #pragma omp atomic read seq_cst
+ #pragma omp atomic seq_cst, read
v = x;
if (v != 79)
abort ();
- #pragma omp atomic capture seq_cst
+ #pragma omp atomic capture , seq_cst
{ v = x; x = 23 + 6 * 4; }
if (v != 79)
abort ();
v = x;
if (v != 47)
abort ();
- #pragma omp atomic capture seq_cst
+ #pragma omp atomic seq_cst capture
{ v = x; x = l ? 17 : 12; }
if (v != 47)
abort ();