Commit 42056eac by Jakub Jelinek Committed by Jakub Jelinek

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
parent f7468577
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> 2014-04-22 Jakub Jelinek <jakub@redhat.com>
PR c/59073 PR c/59073
......
...@@ -11198,6 +11198,18 @@ c_parser_omp_atomic (location_t loc, c_parser *parser) ...@@ -11198,6 +11198,18 @@ c_parser_omp_atomic (location_t loc, c_parser *parser)
if (c_parser_next_token_is (parser, CPP_NAME)) if (c_parser_next_token_is (parser, CPP_NAME))
{ {
const char *p = IDENTIFIER_POINTER (c_parser_peek_token (parser)->value); 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")) if (!strcmp (p, "read"))
code = OMP_ATOMIC_READ; code = OMP_ATOMIC_READ;
...@@ -11212,13 +11224,21 @@ c_parser_omp_atomic (location_t loc, c_parser *parser) ...@@ -11212,13 +11224,21 @@ c_parser_omp_atomic (location_t loc, c_parser *parser)
if (p) if (p)
c_parser_consume_token (parser); 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 (c_parser_next_token_is (parser, CPP_COMMA)
if (!strcmp (p, "seq_cst")) && 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; const char *p
c_parser_consume_token (parser); = 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); 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> 2014-04-24 Marc Glisse <marc.glisse@inria.fr>
PR libstdc++/43622 PR libstdc++/43622
......
...@@ -28534,6 +28534,20 @@ cp_parser_omp_atomic (cp_parser *parser, cp_token *pragma_tok) ...@@ -28534,6 +28534,20 @@ cp_parser_omp_atomic (cp_parser *parser, cp_token *pragma_tok)
tree id = cp_lexer_peek_token (parser->lexer)->u.value; tree id = cp_lexer_peek_token (parser->lexer)->u.value;
const char *p = IDENTIFIER_POINTER (id); 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")) if (!strcmp (p, "read"))
code = OMP_ATOMIC_READ; code = OMP_ATOMIC_READ;
else if (!strcmp (p, "write")) else if (!strcmp (p, "write"))
...@@ -28547,16 +28561,22 @@ cp_parser_omp_atomic (cp_parser *parser, cp_token *pragma_tok) ...@@ -28547,16 +28561,22 @@ cp_parser_omp_atomic (cp_parser *parser, cp_token *pragma_tok)
if (p) if (p)
cp_lexer_consume_token (parser->lexer); cp_lexer_consume_token (parser->lexer);
} }
if (!seq_cst)
if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
{ {
tree id = cp_lexer_peek_token (parser->lexer)->u.value; if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA)
const char *p = IDENTIFIER_POINTER (id); && 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; tree id = cp_lexer_peek_token (parser->lexer)->u.value;
cp_lexer_consume_token (parser->lexer); 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); 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> 2014-04-24 Jeff Law <law@redhat.com>
PR target/60822 PR target/60822
......
...@@ -7,28 +7,28 @@ void ...@@ -7,28 +7,28 @@ void
foo () foo ()
{ {
int v; int v;
#pragma omp atomic seq_cst load /* { dg-error "expected end of line" } */ #pragma omp atomic seq_cst read
v = x; /* { dg-error "invalid form" } */ v = x;
#pragma omp atomic seq_cst, load /* { dg-error "expected end of line" } */ #pragma omp atomic seq_cst, read
v = x; /* { dg-error "invalid form" } */ v = x;
#pragma omp atomic seq_cst store /* { dg-error "expected end of line" } */ #pragma omp atomic seq_cst write
x = v; /* { dg-error "invalid form" } */ x = v;
#pragma omp atomic seq_cst ,store /* { dg-error "expected end of line" } */ #pragma omp atomic seq_cst ,write
x = v; /* { dg-error "invalid form" } */ x = v;
#pragma omp atomic seq_cst update /* { dg-error "expected end of line" } */ #pragma omp atomic seq_cst update
x += v; x += v;
#pragma omp atomic seq_cst , update /* { dg-error "expected end of line" } */ #pragma omp atomic seq_cst , update
x += v; x += v;
#pragma omp atomic seq_cst capture /* { dg-error "expected end of line" } */ #pragma omp atomic seq_cst capture
v = x += 2; /* { dg-error "invalid form" } */ v = x += 2;
#pragma omp atomic seq_cst, capture /* { dg-error "expected end of line" } */ #pragma omp atomic seq_cst, capture
v = x += 2; /* { dg-error "invalid form" } */ v = x += 2;
#pragma omp atomic load , seq_cst /* { dg-error "expected end of line" } */ #pragma omp atomic read , seq_cst
v = x; /* { dg-error "invalid form" } */ v = x;
#pragma omp atomic store ,seq_cst /* { dg-error "expected end of line" } */ #pragma omp atomic write ,seq_cst
x = v; /* { dg-error "invalid form" } */ x = v;
#pragma omp atomic update, seq_cst /* { dg-error "expected end of line" } */ #pragma omp atomic update, seq_cst
x += v; x += v;
#pragma omp atomic capture, seq_cst /* { dg-error "expected end of line" } */ #pragma omp atomic capture, seq_cst
v = x += 2; v = x += 2;
} }
2014-04-24 Jakub Jelinek <jakub@redhat.com> 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-7.c: New test.
* testsuite/libgomp.c/simd-8.c: New test. * testsuite/libgomp.c/simd-8.c: New test.
* testsuite/libgomp.c/simd-9.c: New test. * testsuite/libgomp.c/simd-9.c: New test.
......
...@@ -13,13 +13,13 @@ main () ...@@ -13,13 +13,13 @@ main ()
v = x; v = x;
if (v != 3) if (v != 3)
abort (); abort ();
#pragma omp atomic update seq_cst #pragma omp atomic seq_cst update
x = 3 * 2 * 1 + x; x = 3 * 2 * 1 + x;
#pragma omp atomic read seq_cst #pragma omp atomic read, seq_cst
v = x; v = x;
if (v != 9) if (v != 9)
abort (); abort ();
#pragma omp atomic capture seq_cst #pragma omp atomic seq_cst, capture
v = x = x | 16; v = x = x | 16;
if (v != 25) if (v != 25)
abort (); abort ();
...@@ -27,15 +27,15 @@ main () ...@@ -27,15 +27,15 @@ main ()
v = x = x + 14 * 2 / 4; v = x = x + 14 * 2 / 4;
if (v != 32) if (v != 32)
abort (); abort ();
#pragma omp atomic capture seq_cst #pragma omp atomic seq_cst capture
v = x = 5 | x; v = x = 5 | x;
if (v != 37) if (v != 37)
abort (); abort ();
#pragma omp atomic capture seq_cst #pragma omp atomic capture, seq_cst
v = x = 40 + 12 - 2 - 7 - x; v = x = 40 + 12 - 2 - 7 - x;
if (v != 6) if (v != 6)
abort (); abort ();
#pragma omp atomic read seq_cst #pragma omp atomic seq_cst read
v = x; v = x;
if (v != 6) if (v != 6)
abort (); abort ();
...@@ -43,7 +43,7 @@ main () ...@@ -43,7 +43,7 @@ main ()
{ v = x; x = 3 + x; } { v = x; x = 3 + x; }
if (v != 6) if (v != 6)
abort (); abort ();
#pragma omp atomic capture seq_cst #pragma omp atomic seq_cst capture
{ v = x; x = -1 * -1 * -1 * -1 - x; } { v = x; x = -1 * -1 * -1 * -1 - x; }
if (v != 9) if (v != 9)
abort (); abort ();
...@@ -51,11 +51,11 @@ main () ...@@ -51,11 +51,11 @@ main ()
v = x; v = x;
if (v != -8) if (v != -8)
abort (); abort ();
#pragma omp atomic capture seq_cst #pragma omp atomic capture, seq_cst
{ x = 2 * 2 - x; v = x; } { x = 2 * 2 - x; v = x; }
if (v != 12) if (v != 12)
abort (); abort ();
#pragma omp atomic capture seq_cst #pragma omp atomic seq_cst capture
{ x = 7 & x; v = x; } { x = 7 & x; v = x; }
if (v != 4) if (v != 4)
abort (); abort ();
...@@ -63,7 +63,7 @@ main () ...@@ -63,7 +63,7 @@ main ()
{ v = x; x = 6; } { v = x; x = 6; }
if (v != 4) if (v != 4)
abort (); abort ();
#pragma omp atomic read seq_cst #pragma omp atomic read, seq_cst
v = x; v = x;
if (v != 6) if (v != 6)
abort (); abort ();
...@@ -71,11 +71,11 @@ main () ...@@ -71,11 +71,11 @@ main ()
{ v = x; x = 7 * 8 + 23; } { v = x; x = 7 * 8 + 23; }
if (v != 6) if (v != 6)
abort (); abort ();
#pragma omp atomic read seq_cst #pragma omp atomic seq_cst, read
v = x; v = x;
if (v != 79) if (v != 79)
abort (); abort ();
#pragma omp atomic capture seq_cst #pragma omp atomic capture , seq_cst
{ v = x; x = 23 + 6 * 4; } { v = x; x = 23 + 6 * 4; }
if (v != 79) if (v != 79)
abort (); abort ();
...@@ -83,7 +83,7 @@ main () ...@@ -83,7 +83,7 @@ main ()
v = x; v = x;
if (v != 47) if (v != 47)
abort (); abort ();
#pragma omp atomic capture seq_cst #pragma omp atomic seq_cst capture
{ v = x; x = l ? 17 : 12; } { v = x; x = l ? 17 : 12; }
if (v != 47) if (v != 47)
abort (); abort ();
......
...@@ -14,13 +14,13 @@ foo () ...@@ -14,13 +14,13 @@ foo ()
v = x; v = x;
if (v != 3) if (v != 3)
abort (); abort ();
#pragma omp atomic update seq_cst #pragma omp atomic seq_cst update
x = 3 * 2 * 1 + x; x = 3 * 2 * 1 + x;
#pragma omp atomic read seq_cst #pragma omp atomic read, seq_cst
v = x; v = x;
if (v != 9) if (v != 9)
abort (); abort ();
#pragma omp atomic capture seq_cst #pragma omp atomic seq_cst, capture
v = x = x | 16; v = x = x | 16;
if (v != 25) if (v != 25)
abort (); abort ();
...@@ -28,15 +28,15 @@ foo () ...@@ -28,15 +28,15 @@ foo ()
v = x = x + 14 * 2 / 4; v = x = x + 14 * 2 / 4;
if (v != 32) if (v != 32)
abort (); abort ();
#pragma omp atomic capture seq_cst #pragma omp atomic seq_cst capture
v = x = 5 | x; v = x = 5 | x;
if (v != 37) if (v != 37)
abort (); abort ();
#pragma omp atomic capture seq_cst #pragma omp atomic capture, seq_cst
v = x = 40 + 12 - 2 - 7 - x; v = x = 40 + 12 - 2 - 7 - x;
if (v != 6) if (v != 6)
abort (); abort ();
#pragma omp atomic read seq_cst #pragma omp atomic seq_cst read
v = x; v = x;
if (v != 6) if (v != 6)
abort (); abort ();
...@@ -44,7 +44,7 @@ foo () ...@@ -44,7 +44,7 @@ foo ()
{ v = x; x = 3 + x; } { v = x; x = 3 + x; }
if (v != 6) if (v != 6)
abort (); abort ();
#pragma omp atomic capture seq_cst #pragma omp atomic seq_cst capture
{ v = x; x = -1 * -1 * -1 * -1 - x; } { v = x; x = -1 * -1 * -1 * -1 - x; }
if (v != 9) if (v != 9)
abort (); abort ();
...@@ -52,11 +52,11 @@ foo () ...@@ -52,11 +52,11 @@ foo ()
v = x; v = x;
if (v != -8) if (v != -8)
abort (); abort ();
#pragma omp atomic capture seq_cst #pragma omp atomic capture, seq_cst
{ x = 2 * 2 - x; v = x; } { x = 2 * 2 - x; v = x; }
if (v != 12) if (v != 12)
abort (); abort ();
#pragma omp atomic capture seq_cst #pragma omp atomic seq_cst capture
{ x = 7 & x; v = x; } { x = 7 & x; v = x; }
if (v != 4) if (v != 4)
abort (); abort ();
...@@ -64,7 +64,7 @@ foo () ...@@ -64,7 +64,7 @@ foo ()
{ v = x; x = 6; } { v = x; x = 6; }
if (v != 4) if (v != 4)
abort (); abort ();
#pragma omp atomic read seq_cst #pragma omp atomic read, seq_cst
v = x; v = x;
if (v != 6) if (v != 6)
abort (); abort ();
...@@ -72,11 +72,11 @@ foo () ...@@ -72,11 +72,11 @@ foo ()
{ v = x; x = 7 * 8 + 23; } { v = x; x = 7 * 8 + 23; }
if (v != 6) if (v != 6)
abort (); abort ();
#pragma omp atomic read seq_cst #pragma omp atomic seq_cst, read
v = x; v = x;
if (v != 79) if (v != 79)
abort (); abort ();
#pragma omp atomic capture seq_cst #pragma omp atomic capture , seq_cst
{ v = x; x = 23 + 6 * 4; } { v = x; x = 23 + 6 * 4; }
if (v != 79) if (v != 79)
abort (); abort ();
...@@ -84,7 +84,7 @@ foo () ...@@ -84,7 +84,7 @@ foo ()
v = x; v = x;
if (v != 47) if (v != 47)
abort (); abort ();
#pragma omp atomic capture seq_cst #pragma omp atomic seq_cst capture
{ v = x; x = l ? 17 : 12; } { v = x; x = l ? 17 : 12; }
if (v != 47) if (v != 47)
abort (); abort ();
......
...@@ -13,13 +13,13 @@ main () ...@@ -13,13 +13,13 @@ main ()
v = x; v = x;
if (v != 3) if (v != 3)
abort (); abort ();
#pragma omp atomic update seq_cst #pragma omp atomic seq_cst update
x = 3 * 2 * 1 + x; x = 3 * 2 * 1 + x;
#pragma omp atomic read seq_cst #pragma omp atomic read, seq_cst
v = x; v = x;
if (v != 9) if (v != 9)
abort (); abort ();
#pragma omp atomic capture seq_cst #pragma omp atomic seq_cst, capture
v = x = x | 16; v = x = x | 16;
if (v != 25) if (v != 25)
abort (); abort ();
...@@ -27,15 +27,15 @@ main () ...@@ -27,15 +27,15 @@ main ()
v = x = x + 14 * 2 / 4; v = x = x + 14 * 2 / 4;
if (v != 32) if (v != 32)
abort (); abort ();
#pragma omp atomic capture seq_cst #pragma omp atomic seq_cst capture
v = x = 5 | x; v = x = 5 | x;
if (v != 37) if (v != 37)
abort (); abort ();
#pragma omp atomic capture seq_cst #pragma omp atomic capture, seq_cst
v = x = 40 + 12 - 2 - 7 - x; v = x = 40 + 12 - 2 - 7 - x;
if (v != 6) if (v != 6)
abort (); abort ();
#pragma omp atomic read seq_cst #pragma omp atomic seq_cst read
v = x; v = x;
if (v != 6) if (v != 6)
abort (); abort ();
...@@ -43,7 +43,7 @@ main () ...@@ -43,7 +43,7 @@ main ()
{ v = x; x = 3 + x; } { v = x; x = 3 + x; }
if (v != 6) if (v != 6)
abort (); abort ();
#pragma omp atomic capture seq_cst #pragma omp atomic seq_cst capture
{ v = x; x = -1 * -1 * -1 * -1 - x; } { v = x; x = -1 * -1 * -1 * -1 - x; }
if (v != 9) if (v != 9)
abort (); abort ();
...@@ -51,11 +51,11 @@ main () ...@@ -51,11 +51,11 @@ main ()
v = x; v = x;
if (v != -8) if (v != -8)
abort (); abort ();
#pragma omp atomic capture seq_cst #pragma omp atomic capture, seq_cst
{ x = 2 * 2 - x; v = x; } { x = 2 * 2 - x; v = x; }
if (v != 12) if (v != 12)
abort (); abort ();
#pragma omp atomic capture seq_cst #pragma omp atomic seq_cst capture
{ x = 7 & x; v = x; } { x = 7 & x; v = x; }
if (v != 4) if (v != 4)
abort (); abort ();
...@@ -63,7 +63,7 @@ main () ...@@ -63,7 +63,7 @@ main ()
{ v = x; x = 6; } { v = x; x = 6; }
if (v != 4) if (v != 4)
abort (); abort ();
#pragma omp atomic read seq_cst #pragma omp atomic read, seq_cst
v = x; v = x;
if (v != 6) if (v != 6)
abort (); abort ();
...@@ -71,11 +71,11 @@ main () ...@@ -71,11 +71,11 @@ main ()
{ v = x; x = 7 * 8 + 23; } { v = x; x = 7 * 8 + 23; }
if (v != 6) if (v != 6)
abort (); abort ();
#pragma omp atomic read seq_cst #pragma omp atomic seq_cst, read
v = x; v = x;
if (v != 79) if (v != 79)
abort (); abort ();
#pragma omp atomic capture seq_cst #pragma omp atomic capture , seq_cst
{ v = x; x = 23 + 6 * 4; } { v = x; x = 23 + 6 * 4; }
if (v != 79) if (v != 79)
abort (); abort ();
...@@ -83,7 +83,7 @@ main () ...@@ -83,7 +83,7 @@ main ()
v = x; v = x;
if (v != 47) if (v != 47)
abort (); abort ();
#pragma omp atomic capture seq_cst #pragma omp atomic seq_cst capture
{ v = x; x = l ? 17 : 12; } { v = x; x = l ? 17 : 12; }
if (v != 47) if (v != 47)
abort (); abort ();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment