aboutsummaryrefslogtreecommitdiff
path: root/gcc/c/c-parser.c
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2018-11-09 21:22:48 +0100
committerJakub Jelinek <jakub@gcc.gnu.org>2018-11-09 21:22:48 +0100
commit81a227c6054a82118d80d3f4b2fffb44bc43aae2 (patch)
tree30c7e65f2d000b57efa94b635ccf00982a12d453 /gcc/c/c-parser.c
parent98c91c56bbe8a46ea46f6ca7c85a87c49c258372 (diff)
downloadgcc-81a227c6054a82118d80d3f4b2fffb44bc43aae2.zip
gcc-81a227c6054a82118d80d3f4b2fffb44bc43aae2.tar.gz
gcc-81a227c6054a82118d80d3f4b2fffb44bc43aae2.tar.bz2
c-parser.c (c_parser_omp_clause_final): Use c_parser_expr_no_commas...
c/ * c-parser.c (c_parser_omp_clause_final): Use c_parser_expr_no_commas, convert_lvalue_to_rvalue, c_objc_common_truthvalue_conversion, c_fully_fold and parentheses parsing instead of c_parser_paren_condition. (c_parser_omp_clause_if): Use c_parser_expr_no_commas, convert_lvalue_to_rvalue, c_objc_common_truthvalue_conversion and c_fully_fold instead of c_parser_condition. (c_parser_omp_clause_num_threads, c_parser_omp_clause_num_tasks, c_parser_omp_clause_grainsize, c_parser_omp_clause_priority, c_parser_omp_clause_hint, c_parser_omp_clause_num_teams, c_parser_omp_clause_thread_limit, c_parser_omp_clause_linear): Use c_parser_expr_no_commas instead of c_parser_expression. cp/ * parser.c (cp_parser_omp_clause_final, cp_parser_omp_clause_if): Use cp_parser_assignment_expression instead of cp_parser_condition. (cp_parser_omp_clause_num_threads, cp_parser_omp_clause_num_tasks, cp_parser_omp_clause_grainsize, cp_parser_omp_clause_priority, cp_parser_omp_clause_num_teams, cp_parser_omp_clause_thread_limit, cp_parser_omp_clause_linear, cp_parser_omp_clause_device): Use cp_parser_assignment_expression instead of cp_parser_expression. (cp_parser_omp_clause_hint): Likewise. Formatting fix. testsuite/ * c-c++-common/gomp/clauses-5.c: New test. From-SVN: r265990
Diffstat (limited to 'gcc/c/c-parser.c')
-rw-r--r--gcc/c/c-parser.c37
1 files changed, 26 insertions, 11 deletions
diff --git a/gcc/c/c-parser.c b/gcc/c/c-parser.c
index 4d11df4..5f69e9d 100644
--- a/gcc/c/c-parser.c
+++ b/gcc/c/c-parser.c
@@ -12184,8 +12184,19 @@ c_parser_omp_clause_final (c_parser *parser, tree list)
location_t loc = c_parser_peek_token (parser)->location;
if (c_parser_next_token_is (parser, CPP_OPEN_PAREN))
{
- tree t = c_parser_paren_condition (parser);
- tree c;
+ matching_parens parens;
+ tree t, c;
+ if (!parens.require_open (parser))
+ t = error_mark_node;
+ else
+ {
+ location_t eloc = c_parser_peek_token (parser)->location;
+ c_expr expr = c_parser_expr_no_commas (parser, NULL);
+ t = convert_lvalue_to_rvalue (eloc, expr, true, true).value;
+ t = c_objc_common_truthvalue_conversion (eloc, t);
+ t = c_fully_fold (t, false, NULL);
+ parens.skip_until_found_close (parser);
+ }
check_no_duplicate_clause (list, OMP_CLAUSE_FINAL, "final");
@@ -12305,7 +12316,11 @@ c_parser_omp_clause_if (c_parser *parser, tree list, bool is_omp)
}
}
- tree t = c_parser_condition (parser), c;
+ location_t loc = c_parser_peek_token (parser)->location;
+ c_expr expr = c_parser_expr_no_commas (parser, NULL);
+ expr = convert_lvalue_to_rvalue (loc, expr, true, true);
+ tree t = c_objc_common_truthvalue_conversion (loc, expr.value), c;
+ t = c_fully_fold (t, false, NULL);
parens.skip_until_found_close (parser);
for (c = list; c ; c = OMP_CLAUSE_CHAIN (c))
@@ -12440,7 +12455,7 @@ c_parser_omp_clause_num_threads (c_parser *parser, tree list)
if (parens.require_open (parser))
{
location_t expr_loc = c_parser_peek_token (parser)->location;
- c_expr expr = c_parser_expression (parser);
+ c_expr expr = c_parser_expr_no_commas (parser, NULL);
expr = convert_lvalue_to_rvalue (expr_loc, expr, false, true);
tree c, t = expr.value;
t = c_fully_fold (t, false, NULL);
@@ -12486,7 +12501,7 @@ c_parser_omp_clause_num_tasks (c_parser *parser, tree list)
if (parens.require_open (parser))
{
location_t expr_loc = c_parser_peek_token (parser)->location;
- c_expr expr = c_parser_expression (parser);
+ c_expr expr = c_parser_expr_no_commas (parser, NULL);
expr = convert_lvalue_to_rvalue (expr_loc, expr, false, true);
tree c, t = expr.value;
t = c_fully_fold (t, false, NULL);
@@ -12532,7 +12547,7 @@ c_parser_omp_clause_grainsize (c_parser *parser, tree list)
if (parens.require_open (parser))
{
location_t expr_loc = c_parser_peek_token (parser)->location;
- c_expr expr = c_parser_expression (parser);
+ c_expr expr = c_parser_expr_no_commas (parser, NULL);
expr = convert_lvalue_to_rvalue (expr_loc, expr, false, true);
tree c, t = expr.value;
t = c_fully_fold (t, false, NULL);
@@ -12578,7 +12593,7 @@ c_parser_omp_clause_priority (c_parser *parser, tree list)
if (parens.require_open (parser))
{
location_t expr_loc = c_parser_peek_token (parser)->location;
- c_expr expr = c_parser_expression (parser);
+ c_expr expr = c_parser_expr_no_commas (parser, NULL);
expr = convert_lvalue_to_rvalue (expr_loc, expr, false, true);
tree c, t = expr.value;
t = c_fully_fold (t, false, NULL);
@@ -12625,7 +12640,7 @@ c_parser_omp_clause_hint (c_parser *parser, tree list)
if (parens.require_open (parser))
{
location_t expr_loc = c_parser_peek_token (parser)->location;
- c_expr expr = c_parser_expression (parser);
+ c_expr expr = c_parser_expr_no_commas (parser, NULL);
expr = convert_lvalue_to_rvalue (expr_loc, expr, false, true);
tree c, t = expr.value;
t = c_fully_fold (t, false, NULL);
@@ -13646,7 +13661,7 @@ c_parser_omp_clause_num_teams (c_parser *parser, tree list)
if (parens.require_open (parser))
{
location_t expr_loc = c_parser_peek_token (parser)->location;
- c_expr expr = c_parser_expression (parser);
+ c_expr expr = c_parser_expr_no_commas (parser, NULL);
expr = convert_lvalue_to_rvalue (expr_loc, expr, false, true);
tree c, t = expr.value;
t = c_fully_fold (t, false, NULL);
@@ -13691,7 +13706,7 @@ c_parser_omp_clause_thread_limit (c_parser *parser, tree list)
if (parens.require_open (parser))
{
location_t expr_loc = c_parser_peek_token (parser)->location;
- c_expr expr = c_parser_expression (parser);
+ c_expr expr = c_parser_expr_no_commas (parser, NULL);
expr = convert_lvalue_to_rvalue (expr_loc, expr, false, true);
tree c, t = expr.value;
t = c_fully_fold (t, false, NULL);
@@ -13812,7 +13827,7 @@ c_parser_omp_clause_linear (c_parser *parser, tree list)
{
c_parser_consume_token (parser);
location_t expr_loc = c_parser_peek_token (parser)->location;
- c_expr expr = c_parser_expression (parser);
+ c_expr expr = c_parser_expr_no_commas (parser, NULL);
expr = convert_lvalue_to_rvalue (expr_loc, expr, false, true);
step = expr.value;
step = c_fully_fold (step, false, NULL);