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
This commit is contained in:
Jakub Jelinek 2014-04-24 23:20:28 +02:00 committed by Jakub Jelinek
parent f7468577f8
commit 42056eaced
10 changed files with 133 additions and 71 deletions

View File

@ -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

View File

@ -11195,6 +11195,18 @@ c_parser_omp_atomic (location_t loc, c_parser *parser)
bool swapped = false;
bool seq_cst = false;
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);
@ -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);

View File

@ -1,3 +1,9 @@
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

View File

@ -28529,6 +28529,20 @@ cp_parser_omp_atomic (cp_parser *parser, cp_token *pragma_tok)
bool structured_block = false;
bool seq_cst = false;
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, "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;
@ -28547,16 +28561,22 @@ cp_parser_omp_atomic (cp_parser *parser, cp_token *pragma_tok)
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);

View File

@ -1,3 +1,8 @@
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

View File

@ -7,28 +7,28 @@ void
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;
}

View File

@ -1,5 +1,10 @@
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.

View File

@ -13,13 +13,13 @@ main ()
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 ();
@ -27,15 +27,15 @@ main ()
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 ();
@ -43,7 +43,7 @@ main ()
{ 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 ();
@ -51,11 +51,11 @@ main ()
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 ();
@ -63,7 +63,7 @@ main ()
{ 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 ();
@ -71,11 +71,11 @@ main ()
{ 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 ();
@ -83,7 +83,7 @@ main ()
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 ();

View File

@ -14,13 +14,13 @@ foo ()
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 ();
@ -28,15 +28,15 @@ foo ()
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 ();
@ -44,7 +44,7 @@ foo ()
{ 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 ();
@ -52,11 +52,11 @@ foo ()
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 ();
@ -64,7 +64,7 @@ foo ()
{ 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 ();
@ -72,11 +72,11 @@ foo ()
{ 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 ();
@ -84,7 +84,7 @@ foo ()
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 ();

View File

@ -13,13 +13,13 @@ main ()
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 ();
@ -27,15 +27,15 @@ main ()
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 ();
@ -43,7 +43,7 @@ main ()
{ 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 ();
@ -51,11 +51,11 @@ main ()
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 ();
@ -63,7 +63,7 @@ main ()
{ 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 ();
@ -71,11 +71,11 @@ main ()
{ 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 ();
@ -83,7 +83,7 @@ main ()
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 ();