]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
c-parser.c (c_parser_omp_clause_final): Use c_parser_expr_no_commas...
authorJakub Jelinek <jakub@redhat.com>
Fri, 9 Nov 2018 20:22:48 +0000 (21:22 +0100)
committerJakub Jelinek <jakub@gcc.gnu.org>
Fri, 9 Nov 2018 20:22:48 +0000 (21:22 +0100)
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

gcc/c/ChangeLog
gcc/c/c-parser.c
gcc/cp/ChangeLog
gcc/cp/parser.c
gcc/testsuite/ChangeLog
gcc/testsuite/c-c++-common/gomp/clauses-5.c [new file with mode: 0644]

index be39deea77b54d482f15fd65357fc2f35aa7a5fb..df041a7a8c0fe42df7d8bcdba26fe92ee9bc0965 100644 (file)
@@ -1,5 +1,18 @@
 2018-11-09  Jakub Jelinek  <jakub@redhat.com>
 
+       * 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.
+
        * c-parser.c (c_parser_omp_clause_reduction): Call sorry_at on
        reduction clause with inscan modifier.
 
index 4d11df47d00e478de7627311d45ef62860e52499..5f69e9d52fd4e34feff73aabc79c369c51e9ee4b 100644 (file)
@@ -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);
index f263a3010d253d220309c211a0f2a8063c0c67de..cf738cbf0dac565b91728781537c532ec96c2872 100644 (file)
@@ -1,5 +1,14 @@
 2018-11-09  Jakub Jelinek  <jakub@redhat.com>
 
+       * 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.
+
        * parser.c (cp_parser_omp_clause_reduction): Call sorry_at on
        reduction clause with inscan modifier.
 
index 17fa629b0a3d3d182aa0d31b32791cd5b234701b..1766ef418a2204ccc87a70fea7bee9cb7aa4419d 100644 (file)
@@ -32469,7 +32469,7 @@ cp_parser_omp_clause_final (cp_parser *parser, tree list, location_t location)
   if (!parens.require_open (parser))
     return list;
 
-  t = cp_parser_condition (parser);
+  t = cp_parser_assignment_expression (parser);
 
   if (t == error_mark_node
       || !parens.require_close (parser))
@@ -32592,7 +32592,7 @@ cp_parser_omp_clause_if (cp_parser *parser, tree list, location_t location,
        }
     }
 
-  t = cp_parser_condition (parser);
+  t = cp_parser_assignment_expression (parser);
 
   if (t == error_mark_node
       || !parens.require_close (parser))
@@ -32696,7 +32696,7 @@ cp_parser_omp_clause_num_threads (cp_parser *parser, tree list,
   if (!parens.require_open (parser))
     return list;
 
-  t = cp_parser_expression (parser);
+  t = cp_parser_assignment_expression (parser);
 
   if (t == error_mark_node
       || !parens.require_close (parser))
@@ -32727,7 +32727,7 @@ cp_parser_omp_clause_num_tasks (cp_parser *parser, tree list,
   if (!parens.require_open (parser))
     return list;
 
-  t = cp_parser_expression (parser);
+  t = cp_parser_assignment_expression (parser);
 
   if (t == error_mark_node
       || !parens.require_close (parser))
@@ -32758,7 +32758,7 @@ cp_parser_omp_clause_grainsize (cp_parser *parser, tree list,
   if (!parens.require_open (parser))
     return list;
 
-  t = cp_parser_expression (parser);
+  t = cp_parser_assignment_expression (parser);
 
   if (t == error_mark_node
       || !parens.require_close (parser))
@@ -32789,7 +32789,7 @@ cp_parser_omp_clause_priority (cp_parser *parser, tree list,
   if (!parens.require_open (parser))
     return list;
 
-  t = cp_parser_expression (parser);
+  t = cp_parser_assignment_expression (parser);
 
   if (t == error_mark_node
       || !parens.require_close (parser))
@@ -32811,8 +32811,7 @@ cp_parser_omp_clause_priority (cp_parser *parser, tree list,
    hint ( expression ) */
 
 static tree
-cp_parser_omp_clause_hint (cp_parser *parser, tree list,
-                          location_t location)
+cp_parser_omp_clause_hint (cp_parser *parser, tree list, location_t location)
 {
   tree t, c;
 
@@ -32820,7 +32819,7 @@ cp_parser_omp_clause_hint (cp_parser *parser, tree list,
   if (!parens.require_open (parser))
     return list;
 
-  t = cp_parser_expression (parser);
+  t = cp_parser_assignment_expression (parser);
 
   if (t == error_mark_node
       || !parens.require_close (parser))
@@ -33442,7 +33441,7 @@ cp_parser_omp_clause_num_teams (cp_parser *parser, tree list,
   if (!parens.require_open (parser))
     return list;
 
-  t = cp_parser_expression (parser);
+  t = cp_parser_assignment_expression (parser);
 
   if (t == error_mark_node
       || !parens.require_close (parser))
@@ -33473,7 +33472,7 @@ cp_parser_omp_clause_thread_limit (cp_parser *parser, tree list,
   if (!parens.require_open (parser))
     return list;
 
-  t = cp_parser_expression (parser);
+  t = cp_parser_assignment_expression (parser);
 
   if (t == error_mark_node
       || !parens.require_close (parser))
@@ -33641,7 +33640,7 @@ cp_parser_omp_clause_linear (cp_parser *parser, tree list,
            step = NULL_TREE;
        }
       if (!step)
-       step = cp_parser_expression (parser);
+       step = cp_parser_assignment_expression (parser);
 
       if (!parens.require_close (parser))
        cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true,
@@ -34151,7 +34150,7 @@ cp_parser_omp_clause_device (cp_parser *parser, tree list,
   if (!parens.require_open (parser))
     return list;
 
-  t = cp_parser_expression (parser);
+  t = cp_parser_assignment_expression (parser);
 
   if (t == error_mark_node
       || !parens.require_close (parser))
index d2b915afddc3e8e32f59bd250768f6a2a6c150b6..c1b8d6b2cc1d8d1877f8ce3f9269192e59b935f7 100644 (file)
@@ -1,5 +1,7 @@
 2018-11-09  Jakub Jelinek  <jakub@redhat.com>
 
+       * c-c++-common/gomp/clauses-5.c: New test.
+
        * c-c++-common/gomp/requires-1.c: Prune not supported yet messages.
        * c-c++-common/gomp/requires-2.c: Likewise.
        * c-c++-common/gomp/requires-4.c: Likewise.
diff --git a/gcc/testsuite/c-c++-common/gomp/clauses-5.c b/gcc/testsuite/c-c++-common/gomp/clauses-5.c
new file mode 100644 (file)
index 0000000..35e16f0
--- /dev/null
@@ -0,0 +1,52 @@
+void
+foo (int *p)
+{
+  int i, j = 0;
+  #pragma omp parallel if (2, 1)               /* { dg-error "expected" } */
+  ;
+  #pragma omp parallel num_threads (3, 4)      /* { dg-error "expected" } */
+  ;
+  #pragma omp teams num_teams (4, 5)           /* { dg-error "expected" } */
+  ;
+  #pragma omp teams thread_limit (6, 7)                /* { dg-error "expected" } */
+  ;
+  #pragma omp for linear (j : 8, 9)            /* { dg-error "expected" } */
+  for (i = 0; i < 30; i++)
+    j += (8, 9);
+  #pragma omp for schedule (static, 3, 4)      /* { dg-error "expected" } */
+  for (i = 0; i < 30; i++)
+    ;
+  #pragma omp for collapse (1, 1)              /* { dg-error "expected" } */
+  for (i = 0; i < 30; i++)
+    ;
+  #pragma omp for ordered (1, 1)               /* { dg-error "expected" } */
+  for (i = 0; i < 30; i++)
+    ;
+  #pragma omp simd safelen (3, 4)              /* { dg-error "expected" } */
+  for (i = 0; i < 30; i++)
+    ;
+  #pragma omp simd simdlen (4, 8)              /* { dg-error "expected" } */
+  for (i = 0; i < 30; i++)
+    ;
+  #pragma omp simd aligned (p: 4, 8)           /* { dg-error "expected" } */
+  for (i = 0; i < 30; i++)
+    ;
+  #pragma omp teams
+  #pragma omp distribute dist_schedule (static, 6, 7) /* { dg-error "expected" } */
+  for (i = 0; i < 30; i++)
+    ;
+  #pragma omp task final (8, 1)                        /* { dg-error "expected" } */
+  ;
+  #pragma omp task priority (2, 3)             /* { dg-error "expected" } */
+  ;
+  #pragma omp taskloop grainsize (4, 5)                /* { dg-error "expected" } */
+  for (i = 0; i < 30; i++)
+    ;
+  #pragma omp taskloop num_tasks (5, 6)                /* { dg-error "expected" } */
+  for (i = 0; i < 30; i++)
+    ;
+  #pragma omp target device (5, 1)             /* { dg-error "expected" } */
+  ;
+  #pragma omp critical (baz) hint (2, 3)       /* { dg-error "expected" } */
+  ;
+}