Hi!

The spec says:
"The loops associated with an ordered clause with a parameter may not include 
range-for
loops."
This patch implements this restriction.  Committed to gomp-5_0-branch.

2018-10-19  Jakub Jelinek  <ja...@redhat.com>

        * parser.c (cp_parser_omp_for_loop): Disallow ordered clause with
        argument for range-for loops.

        * g++.dg/gomp/doacross-1.C: New test.

--- gcc/cp/parser.c.jj  2018-10-18 10:17:14.098009735 +0200
+++ gcc/cp/parser.c     2018-10-19 10:36:05.631549494 +0200
@@ -36139,6 +36139,11 @@ cp_parser_omp_for_loop (cp_parser *parse
                    pre_body = this_pre_body;
                }
 
+             if (ordered_cl)
+               error_at (OMP_CLAUSE_LOCATION (ordered_cl),
+                         "%<ordered%> clause with parameter on "
+                         "range-based %<for%> loop");
+
              goto parse_close_paren;
            }
        }
--- gcc/testsuite/g++.dg/gomp/doacross-1.C.jj   2018-10-19 10:32:30.132148779 
+0200
+++ gcc/testsuite/g++.dg/gomp/doacross-1.C      2018-10-19 10:37:44.930890996 
+0200
@@ -0,0 +1,21 @@
+// { dg-do compile { target c++11 } }
+// { dg-options "-fopenmp" }
+
+int a[42];
+
+void
+foo ()
+{
+  #pragma omp for ordered (1)  // { dg-error "'ordered' clause with parameter 
on range-based 'for' loop" }
+  for (auto x : a)
+    ;
+}
+
+void
+bar ()
+{
+  #pragma omp for ordered (2)  // { dg-error "'ordered' clause with parameter 
on range-based 'for' loop" }
+  for (int i = 0; i < 1; i++)
+    for (auto x : a)
+      ;
+}


        Jakub

Reply via email to