Hi!

A change is being voted into OpenMP 5.0, where the depend clause
modifiers are separated from dependence type with a comma rather than
colon (mostly for consistency with other clauses), and more importantly,
dependence type is no longer optional, the clauses previously without
dependence type should now use depobj dependence type (this is to make
parsing non-ambiguous).

Tested on x86_64-linux, committed to gomp-5_0-branch.

2018-08-01  Jakub Jelinek  <ja...@redhat.com>

        * tree-core.h (enum omp_clause_depend_kind): Remove
        OMP_CLAUSE_DEPEND_UNSPECIFIED, add OMP_CLAUSE_DEPEND_DEPOBJ.
        * gimplify.c (gimplify_omp_depend): Handle OMP_CLAUSE_DEPEND_DEPOBJ
        instead of OMP_CLAUSE_DEPEND_UNSPECIFIED.
        * omp-low.c (lower_depend_clauses): Likewise.
        * tree-pretty-print.c (dump_omp_clause): Likewise, print the
        dependence type unconditionally.
gcc/c-family/
        * c-omp.c (c_finish_omp_depobj): Test for OMP_CLAUSE_DEPEND_DEPOBJ
        on clause instead of OMP_CLAUSE_DEPEND_UNSPECIFIED, adjust diagnostics
        in that case.  Expect kind to be OMP_CLAUSE_DEPEND_SOURCE if clause
        is specified, rather than OMP_CLAUSE_DEPEND_UNSPECIFIED.
gcc/c/
        * c-parser.c (c_parser_omp_clause_depend): Adjust parsing for
        dependence type to be no longer optional and dependence modifier
        separated from dependence type by comma rather than colon.  Parse
        depobj dependence type.
        (c_parser_omp_depobj): Use OMP_CLAUSE_DEPEND_SOURCE instead of
        OMP_CLAUSE_DEPEND_UNSPECIFIED.
        * c-typeck.c (c_finish_omp_clauses): Handle OMP_CLAUSE_DEPEND_DEPOBJ
        instead of OMP_CLAUSE_DEPEND_UNSPECIFIED, adjust diagnostics.
gcc/cp/
        * parser.c (cp_parser_omp_clause_depend): Adjust parsing for
        dependence type to be no longer optional and dependence modifier
        separated from dependence type by comma rather than colon.  Parse
        depobj dependence type.
        (cp_parser_omp_depobj): Use OMP_CLAUSE_DEPEND_SOURCE instead of
        OMP_CLAUSE_DEPEND_UNSPECIFIED.
        * semantics.c (finish_omp_clauses): Handle OMP_CLAUSE_DEPEND_DEPOBJ
        instead of OMP_CLAUSE_DEPEND_UNSPECIFIED, adjust diagnostics.
        * pt.c (tsubst_expr): Use OMP_CLAUSE_DEPEND_SOURCE instead of
        OMP_CLAUSE_DEPEND_UNSPECIFIED.
gcc/testsuite/
        * c-c++-common/gomp/depend-iterator-1.c (foo, bar, baz): Separate
        dependence modifier from type with comma instead of colon.
        * c-c++-common/gomp/taskwait-depend-1.c (foo): Likewise.
        * c-c++-common/gomp/depobj-1.c (f1, f2, f3): Likewise.  Add depobj: to
        depend clauses without dependence type.  Add an extra test for depobj
        construct with depobj: type on depend clause and omp_depend_t type of
        the lvalue.
        * c-c++-common/gomp/depend-iterator-2.c (f1, f2, f3): Separate
        dependence modifier from type with comma instead of colon.  Adjust
        diagnostics for dependence type no longer being optional.
        * g++.dg/gomp/depend-iterator-1.C (foo, bar, baz): Separate
        dependence modifier from type with comma instead of colon.
        * g++.dg/gomp/depend-iterator-2.C (f1, f2, f3, f4): Likewise.  Adjust
        diagnostics for dependence type no longer being optional.
        * g++.dg/gomp/depobj-1.C (f1, f2, f4, f5): Separate dependence modifier
        from type with comma instead of colon.  Add depobj: to depend clauses
        without dependence type.  Add an extra test for depobj construct with
        depobj: type on depend clause and omp_depend_t type of the lvalue.
libgomp/
        * testsuite/libgomp.c-c++-common/depend-iterator-1.c (main): Separate
        dependence modifier from type with comma instead of colon.
        * testsuite/libgomp.c-c++-common/depend-iterator-2.c (foo): Likewise.
        * testsuite/libgomp.c-c++-common/depobj-1.c (dep, dep2, dep3,
        antidep): Add depobj: to depend clauses without dependence type.
        * testsuite/libgomp.c++/depend-iterator-1.C (bar, baz): Separate
        dependence modifier from type with comma instead of colon.
        * testsuite/libgomp.c++/depobj-1.C (dep, dep2, dep3, antidep): Add
        depobj: to depend clauses without dependence type.

--- gcc/tree-core.h.jj  2018-07-10 11:36:00.291380752 +0200
+++ gcc/tree-core.h     2018-08-01 16:36:02.709901571 +0200
@@ -1408,13 +1408,13 @@ struct GTY(()) tree_constructor {
 
 enum omp_clause_depend_kind
 {
-  OMP_CLAUSE_DEPEND_UNSPECIFIED,
   OMP_CLAUSE_DEPEND_IN,
   OMP_CLAUSE_DEPEND_OUT,
   OMP_CLAUSE_DEPEND_INOUT,
   OMP_CLAUSE_DEPEND_MUTEXINOUTSET,
   OMP_CLAUSE_DEPEND_SOURCE,
   OMP_CLAUSE_DEPEND_SINK,
+  OMP_CLAUSE_DEPEND_DEPOBJ,
   OMP_CLAUSE_DEPEND_LAST
 };
 
--- gcc/gimplify.c.jj   2018-08-01 14:34:53.945975952 +0200
+++ gcc/gimplify.c      2018-08-01 16:36:33.391000517 +0200
@@ -7547,7 +7547,7 @@ gimplify_omp_depend (tree *list_p, gimpl
          case OMP_CLAUSE_DEPEND_MUTEXINOUTSET:
            i = 1;
            break;
-         case OMP_CLAUSE_DEPEND_UNSPECIFIED:
+         case OMP_CLAUSE_DEPEND_DEPOBJ:
            i = 3;
            break;
          case OMP_CLAUSE_DEPEND_SOURCE:
@@ -7761,7 +7761,7 @@ gimplify_omp_depend (tree *list_p, gimpl
          case OMP_CLAUSE_DEPEND_MUTEXINOUTSET:
            i = 1;
            break;
-         case OMP_CLAUSE_DEPEND_UNSPECIFIED:
+         case OMP_CLAUSE_DEPEND_DEPOBJ:
            i = 3;
            break;
          case OMP_CLAUSE_DEPEND_SOURCE:
--- gcc/omp-low.c.jj    2018-07-24 18:11:57.201917314 +0200
+++ gcc/omp-low.c       2018-08-01 16:37:02.436094166 +0200
@@ -7386,7 +7386,7 @@ lower_depend_clauses (tree *pclauses, gi
        case OMP_CLAUSE_DEPEND_MUTEXINOUTSET:
          cnt[1]++;
          break;
-       case OMP_CLAUSE_DEPEND_UNSPECIFIED:
+       case OMP_CLAUSE_DEPEND_DEPOBJ:
          cnt[3]++;
          break;
        case OMP_CLAUSE_DEPEND_SOURCE:
@@ -7443,7 +7443,7 @@ lower_depend_clauses (tree *pclauses, gi
                if (i != 1)
                  continue;
                break;
-             case OMP_CLAUSE_DEPEND_UNSPECIFIED:
+             case OMP_CLAUSE_DEPEND_DEPOBJ:
                if (i != 3)
                  continue;
                break;
--- gcc/tree-pretty-print.c.jj  2018-07-30 18:22:56.159264665 +0200
+++ gcc/tree-pretty-print.c     2018-08-01 16:38:00.110280161 +0200
@@ -681,8 +681,8 @@ dump_omp_clause (pretty_printer *pp, tre
       pp_string (pp, "depend(");
       switch (OMP_CLAUSE_DEPEND_KIND (clause))
        {
-       case OMP_CLAUSE_DEPEND_UNSPECIFIED:
-         name = NULL;
+       case OMP_CLAUSE_DEPEND_DEPOBJ:
+         name = "depobj";
          break;
        case OMP_CLAUSE_DEPEND_IN:
          name = "in";
@@ -737,11 +737,8 @@ dump_omp_clause (pretty_printer *pp, tre
            pp_colon (pp);
            t = TREE_VALUE (t);
          }
-       if (name)
-         {
-           pp_string (pp, name);
-           pp_colon (pp);
-         }
+       pp_string (pp, name);
+       pp_colon (pp);
        dump_generic_node (pp, t, spc, flags, false);
        pp_right_paren (pp);
       }
--- gcc/c-family/c-omp.c.jj     2018-08-01 14:04:30.178369000 +0200
+++ gcc/c-family/c-omp.c        2018-08-01 17:30:00.841067774 +0200
@@ -477,10 +477,10 @@ c_finish_omp_depobj (location_t loc, tre
                  "construct");
       switch (OMP_CLAUSE_DEPEND_KIND (clause))
        {
-       case OMP_CLAUSE_DEPEND_UNSPECIFIED:
+       case OMP_CLAUSE_DEPEND_DEPOBJ:
          error_at (OMP_CLAUSE_LOCATION (clause),
-                   "dependence type must be specified in %<depend%> clause "
-                   "on %<depobj%> construct");
+                   "%<depobj%> dependence type specified in %<depend%> "
+                   "clause on %<depobj%> construct");
          return;
        case OMP_CLAUSE_DEPEND_SOURCE:
        case OMP_CLAUSE_DEPEND_SINK:
@@ -519,7 +519,7 @@ c_finish_omp_depobj (location_t loc, tre
        }
     }
   else
-    gcc_assert (kind != OMP_CLAUSE_DEPEND_UNSPECIFIED);
+    gcc_assert (kind != OMP_CLAUSE_DEPEND_SOURCE);
 
   if (depobj == error_mark_node)
     return;
--- gcc/c/c-parser.c.jj 2018-07-31 13:53:31.320112896 +0200
+++ gcc/c/c-parser.c    2018-08-01 17:27:10.069513226 +0200
@@ -13940,13 +13940,22 @@ c_parser_omp_iterators (c_parser *parser
    OpenMP 4.5:
    depend ( source )
 
-   depend ( sink  : vec )  */
+   depend ( sink  : vec )
+
+   OpenMP 5.0:
+   depend ( depend-modifier , depend-kind: variable-list )
+   
+   depend-kind:
+     in | out | inout | mutexinoutset | depobj
+
+   depend-modifier:
+     iterator ( iterators-definition )  */
 
 static tree
 c_parser_omp_clause_depend (c_parser *parser, tree list)
 {
   location_t clause_loc = c_parser_peek_token (parser)->location;
-  enum omp_clause_depend_kind kind = OMP_CLAUSE_DEPEND_UNSPECIFIED;
+  enum omp_clause_depend_kind kind = OMP_CLAUSE_DEPEND_LAST;
   tree nl, c, iterators = NULL_TREE;
 
   matching_parens parens;
@@ -13956,31 +13965,15 @@ c_parser_omp_clause_depend (c_parser *pa
   do
     {
       if (c_parser_next_token_is_not (parser, CPP_NAME))
-       break;
+       goto invalid_kind;
 
       const char *p = IDENTIFIER_POINTER (c_parser_peek_token (parser)->value);
-      if (strcmp ("iterator", p) == 0
-         && iterators == NULL_TREE
-         && c_parser_peek_2nd_token (parser)->type == CPP_OPEN_PAREN)
-       {
-         /* FIXME: if depend kind remains optional, this is ambiguous
-            and we'd need to do tentative parsing to distinguish between
-            valid iterator modifier and just normal expression starting
-            with iterator ( tokens.  Not doing it right now, as I hope
-            it will become mandatory.  */
+      if (strcmp ("iterator", p) == 0 && iterators == NULL_TREE)
+       {
          iterators = c_parser_omp_iterators (parser);
-         c_parser_require (parser, CPP_COLON, "expected %<:%>");
+         c_parser_require (parser, CPP_COMMA, "expected %<,%>");
          continue;
        }
-      if (strcmp ("source", p) == 0
-         && c_parser_peek_2nd_token (parser)->type == CPP_CLOSE_PAREN)
-       {
-         /* FIXME: this is another ambiguity.  */
-         kind = OMP_CLAUSE_DEPEND_SOURCE;
-         break;
-       }
-      if (c_parser_peek_2nd_token (parser)->type != CPP_COLON)
-       break;
       if (strcmp ("in", p) == 0)
        kind = OMP_CLAUSE_DEPEND_IN;
       else if (strcmp ("inout", p) == 0)
@@ -13989,16 +13982,19 @@ c_parser_omp_clause_depend (c_parser *pa
        kind = OMP_CLAUSE_DEPEND_MUTEXINOUTSET;
       else if (strcmp ("out", p) == 0)
        kind = OMP_CLAUSE_DEPEND_OUT;
+      else if (strcmp ("depobj", p) == 0)
+       kind = OMP_CLAUSE_DEPEND_DEPOBJ;
       else if (strcmp ("sink", p) == 0)
        kind = OMP_CLAUSE_DEPEND_SINK;
+      else if (strcmp ("source", p) == 0)
+       kind = OMP_CLAUSE_DEPEND_SOURCE;
       else
        goto invalid_kind;
       break;
     }
   while (1);
 
-  if (kind != OMP_CLAUSE_DEPEND_UNSPECIFIED)
-    c_parser_consume_token (parser);
+  c_parser_consume_token (parser);
 
   if (iterators
       && (kind == OMP_CLAUSE_DEPEND_SOURCE || kind == OMP_CLAUSE_DEPEND_SINK))
@@ -14019,8 +14015,7 @@ c_parser_omp_clause_depend (c_parser *pa
       return c;
     }
 
-  if (kind != OMP_CLAUSE_DEPEND_UNSPECIFIED
-      && !c_parser_require (parser, CPP_COLON, "expected %<:%>"))
+  if (!c_parser_require (parser, CPP_COLON, "expected %<:%>"))
     goto resync_fail;
 
   if (kind == OMP_CLAUSE_DEPEND_SINK)
@@ -16172,7 +16167,7 @@ c_parser_omp_depobj (c_parser *parser)
 
   parens.skip_until_found_close (parser);
   tree clause = NULL_TREE;
-  enum omp_clause_depend_kind kind = OMP_CLAUSE_DEPEND_UNSPECIFIED;
+  enum omp_clause_depend_kind kind = OMP_CLAUSE_DEPEND_SOURCE;
   location_t c_loc = c_parser_peek_token (parser)->location;
   if (c_parser_next_token_is (parser, CPP_NAME))
     {
@@ -16209,7 +16204,7 @@ c_parser_omp_depobj (c_parser *parser)
                  else if (!strcmp ("mutexinoutset", p2))
                    kind = OMP_CLAUSE_DEPEND_MUTEXINOUTSET;
                }
-             if (kind == OMP_CLAUSE_DEPEND_UNSPECIFIED)
+             if (kind == OMP_CLAUSE_DEPEND_SOURCE)
                {
                  clause = error_mark_node;
                  error_at (c2_loc, "expected %<in%>, %<out%>, %<inout%> or "
@@ -16221,7 +16216,7 @@ c_parser_omp_depobj (c_parser *parser)
            clause = error_mark_node;
        }
     }
-  if (!clause && kind == OMP_CLAUSE_DEPEND_UNSPECIFIED)
+  if (!clause && kind == OMP_CLAUSE_DEPEND_SOURCE)
     {
       clause = error_mark_node;
       error_at (c_loc, "expected %<depend%>, %<destroy%> or %<update%> 
clause");
--- gcc/c/c-typeck.c.jj 2018-07-10 11:32:27.025161453 +0200
+++ gcc/c/c-typeck.c    2018-08-01 17:00:46.329549760 +0200
@@ -13786,12 +13786,11 @@ c_finish_omp_clauses (tree clauses, enum
            {
              if (handle_omp_array_sections (c, ort))
                remove = true;
-             else if (OMP_CLAUSE_DEPEND_KIND (c)
-                      == OMP_CLAUSE_DEPEND_UNSPECIFIED)
+             else if (OMP_CLAUSE_DEPEND_KIND (c) == OMP_CLAUSE_DEPEND_DEPOBJ)
                {
                  error_at (OMP_CLAUSE_LOCATION (c),
-                           "%<depend%> clause without dependence type "
-                           "on array section");
+                           "%<depend%> clause with %<depobj%> dependence "
+                           "type on array section");
                  remove = true;
                }
              break;
@@ -13812,13 +13811,14 @@ c_finish_omp_clauses (tree clauses, enum
                        "bit-field %qE in %qs clause", t, "depend");
              remove = true;
            }
-         else if (OMP_CLAUSE_DEPEND_KIND (c) == OMP_CLAUSE_DEPEND_UNSPECIFIED)
+         else if (OMP_CLAUSE_DEPEND_KIND (c) == OMP_CLAUSE_DEPEND_DEPOBJ)
            {
              if (!c_omp_depend_t_p (TREE_TYPE (t)))
                {
                  error_at (OMP_CLAUSE_LOCATION (c),
                            "%qE does not have %<omp_depend_t%> type in "
-                           "%<depend%> clause without dependence type", t);
+                           "%<depend%> clause with %<depobj%> dependence "
+                           "type", t);
                  remove = true;
                }
            }
@@ -13826,7 +13826,8 @@ c_finish_omp_clauses (tree clauses, enum
            {
              error_at (OMP_CLAUSE_LOCATION (c),
                        "%qE should not have %<omp_depend_t%> type in "
-                       "%<depend%> clause with dependence type", t);
+                       "%<depend%> clause with dependence type other than "
+                       "%<depobj%>", t);
              remove = true;
            }
          if (!remove)
--- gcc/cp/parser.c.jj  2018-07-31 13:56:33.842637416 +0200
+++ gcc/cp/parser.c     2018-08-01 17:37:54.378605484 +0200
@@ -33771,13 +33771,22 @@ cp_parser_omp_iterators (cp_parser *pars
    OpenMP 4.5:
    depend ( source )
 
-   depend ( sink : vec ) */
+   depend ( sink : vec )
+
+   OpenMP 5.0:
+   depend ( depend-modifier , depend-kind: variable-list )
+
+   depend-kind:
+     in | out | inout | mutexinoutset | depobj
+
+   depend-modifier:
+     iterator ( iterators-definition )  */
 
 static tree
 cp_parser_omp_clause_depend (cp_parser *parser, tree list, location_t loc)
 {
   tree nlist, c, iterators = NULL_TREE;
-  enum omp_clause_depend_kind kind = OMP_CLAUSE_DEPEND_UNSPECIFIED;
+  enum omp_clause_depend_kind kind = OMP_CLAUSE_DEPEND_LAST;
 
   matching_parens parens;
   if (!parens.require_open (parser))
@@ -33786,44 +33795,18 @@ cp_parser_omp_clause_depend (cp_parser *
   do
     {
       if (cp_lexer_next_token_is_not (parser->lexer, CPP_NAME))
-       break;
+       goto invalid_kind;
 
       tree id = cp_lexer_peek_token (parser->lexer)->u.value;
       const char *p = IDENTIFIER_POINTER (id);
 
-      if (strcmp ("iterator", p) == 0
-         && iterators == NULL_TREE
-         && cp_lexer_nth_token_is (parser->lexer, 2, CPP_OPEN_PAREN))
-       {
-         cp_lexer_save_tokens (parser->lexer);
-         cp_lexer_consume_token (parser->lexer);
-         cp_lexer_consume_token (parser->lexer);
-         bool is_iter
-           = (cp_parser_skip_to_closing_parenthesis (parser, false, false,
-                                                     /*consume_paren=*/true)
-              && cp_lexer_next_token_is (parser->lexer, CPP_COLON));
-
-         /* Roll back the tokens we skipped.  */
-         cp_lexer_rollback_tokens (parser->lexer);
-
-         if (is_iter)
-           {
-             begin_scope (sk_omp, NULL);
-             iterators = cp_parser_omp_iterators (parser);
-             cp_parser_require (parser, CPP_COLON, RT_COLON);
-             continue;
-           }
-       }
-      if (strcmp ("source", p) == 0
-         && cp_lexer_nth_token_is (parser->lexer, 2, CPP_CLOSE_PAREN))
+      if (strcmp ("iterator", p) == 0 && iterators == NULL_TREE)
        {
-         /* FIXME: this is ambiguous.  */
-         kind = OMP_CLAUSE_DEPEND_SOURCE;
-         break;
+         begin_scope (sk_omp, NULL);
+         iterators = cp_parser_omp_iterators (parser);
+         cp_parser_require (parser, CPP_COMMA, RT_COMMA);
+         continue;
        }
-
-      if (!cp_lexer_nth_token_is (parser->lexer, 2, CPP_COLON))
-       break;
       if (strcmp ("in", p) == 0)
        kind = OMP_CLAUSE_DEPEND_IN;
       else if (strcmp ("inout", p) == 0)
@@ -33832,16 +33815,19 @@ cp_parser_omp_clause_depend (cp_parser *
        kind = OMP_CLAUSE_DEPEND_MUTEXINOUTSET;
       else if (strcmp ("out", p) == 0)
        kind = OMP_CLAUSE_DEPEND_OUT;
+      else if (strcmp ("depobj", p) == 0)
+       kind = OMP_CLAUSE_DEPEND_DEPOBJ;
       else if (strcmp ("sink", p) == 0)
        kind = OMP_CLAUSE_DEPEND_SINK;
+      else if (strcmp ("source", p) == 0)
+       kind = OMP_CLAUSE_DEPEND_SOURCE;
       else
        goto invalid_kind;
       break;
     }
   while (1);
 
-  if (kind != OMP_CLAUSE_DEPEND_UNSPECIFIED)
-    cp_lexer_consume_token (parser->lexer);
+  cp_lexer_consume_token (parser->lexer);
 
   if (iterators
       && (kind == OMP_CLAUSE_DEPEND_SOURCE || kind == OMP_CLAUSE_DEPEND_SINK))
@@ -33865,8 +33851,7 @@ cp_parser_omp_clause_depend (cp_parser *
       return c;
     }
 
-  if (kind != OMP_CLAUSE_DEPEND_UNSPECIFIED
-      && !cp_parser_require (parser, CPP_COLON, RT_COLON))
+  if (!cp_parser_require (parser, CPP_COLON, RT_COLON))
     goto resync_fail;
 
   if (kind == OMP_CLAUSE_DEPEND_SINK)
@@ -35354,7 +35339,7 @@ cp_parser_omp_depobj (cp_parser *parser,
                                           /*consume_paren=*/true);
 
   tree clause = NULL_TREE;
-  enum omp_clause_depend_kind kind = OMP_CLAUSE_DEPEND_UNSPECIFIED;
+  enum omp_clause_depend_kind kind = OMP_CLAUSE_DEPEND_SOURCE;
   location_t c_loc = cp_lexer_peek_token (parser->lexer)->location;
   if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
     {
@@ -35394,7 +35379,7 @@ cp_parser_omp_depobj (cp_parser *parser,
                  else if (!strcmp ("mutexinoutset", p2))
                    kind = OMP_CLAUSE_DEPEND_MUTEXINOUTSET;
                }
-             if (kind == OMP_CLAUSE_DEPEND_UNSPECIFIED)
+             if (kind == OMP_CLAUSE_DEPEND_SOURCE)
                {
                  clause = error_mark_node;
                  error_at (c2_loc, "expected %<in%>, %<out%>, %<inout%> or "
@@ -35410,7 +35395,7 @@ cp_parser_omp_depobj (cp_parser *parser,
            clause = error_mark_node;
        }
     }
-  if (!clause && kind == OMP_CLAUSE_DEPEND_UNSPECIFIED)
+  if (!clause && kind == OMP_CLAUSE_DEPEND_SOURCE)
     {
       clause = error_mark_node;
       error_at (c_loc, "expected %<depend%>, %<destroy%> or %<update%> 
clause");
--- gcc/cp/semantics.c.jj       2018-07-25 11:41:47.760405527 +0200
+++ gcc/cp/semantics.c  2018-08-01 17:16:25.767685638 +0200
@@ -6843,12 +6843,11 @@ finish_omp_clauses (tree clauses, enum c
            {
              if (handle_omp_array_sections (c, ort))
                remove = true;
-             else if (OMP_CLAUSE_DEPEND_KIND (c)
-                      == OMP_CLAUSE_DEPEND_UNSPECIFIED)
+             else if (OMP_CLAUSE_DEPEND_KIND (c) == OMP_CLAUSE_DEPEND_DEPOBJ)
                {
                  error_at (OMP_CLAUSE_LOCATION (c),
-                           "%<depend%> clause without dependence type "
-                           "on array section");
+                           "%<depend%> clause with %<depobj%> dependence "
+                           "type on array section");
                  remove = true;
                }
              break;
@@ -6884,7 +6883,7 @@ finish_omp_clauses (tree clauses, enum c
                        "bit-field %qE in %qs clause", t, "depend");
              remove = true;
            }
-         else if (OMP_CLAUSE_DEPEND_KIND (c) == OMP_CLAUSE_DEPEND_UNSPECIFIED)
+         else if (OMP_CLAUSE_DEPEND_KIND (c) == OMP_CLAUSE_DEPEND_DEPOBJ)
            {
              if (!c_omp_depend_t_p (TYPE_REF_P (TREE_TYPE (t))
                                     ? TREE_TYPE (TREE_TYPE (t))
@@ -6892,7 +6891,8 @@ finish_omp_clauses (tree clauses, enum c
                {
                  error_at (OMP_CLAUSE_LOCATION (c),
                            "%qE does not have %<omp_depend_t%> type in "
-                           "%<depend%> clause without dependence type", t);
+                           "%<depend%> clause with %<depobj%> dependence "
+                           "type", t);
                  remove = true;
                }
            }
@@ -6902,7 +6902,8 @@ finish_omp_clauses (tree clauses, enum c
            {
              error_at (OMP_CLAUSE_LOCATION (c),
                        "%qE should not have %<omp_depend_t%> type in "
-                       "%<depend%> clause with dependence type", t);
+                       "%<depend%> clause with dependence type other than "
+                       "%<depobj%>", t);
              remove = true;
            }
          if (!remove)
--- gcc/cp/pt.c.jj      2018-07-25 11:44:17.162642291 +0200
+++ gcc/cp/pt.c 2018-08-01 17:39:48.853977209 +0200
@@ -17359,7 +17359,7 @@ tsubst_expr (tree t, tree args, tsubst_f
       r = RECUR (OMP_DEPOBJ_DEPOBJ (t));
       if (OMP_DEPOBJ_CLAUSES (t) && OMP_DEPOBJ_CLAUSES (t) != error_mark_node)
        {
-         enum omp_clause_depend_kind kind = OMP_CLAUSE_DEPEND_UNSPECIFIED;
+         enum omp_clause_depend_kind kind = OMP_CLAUSE_DEPEND_SOURCE;
          if (TREE_CODE (OMP_DEPOBJ_CLAUSES (t)) == OMP_CLAUSE)
            {
              tmp = tsubst_omp_clauses (OMP_DEPOBJ_CLAUSES (t), C_ORT_OMP,
@@ -17377,7 +17377,7 @@ tsubst_expr (tree t, tree args, tsubst_f
        }
       else
        finish_omp_depobj (EXPR_LOCATION (t), r,
-                          OMP_CLAUSE_DEPEND_UNSPECIFIED,
+                          OMP_CLAUSE_DEPEND_SOURCE,
                           OMP_DEPOBJ_CLAUSES (t));
       break;
 
--- gcc/testsuite/c-c++-common/gomp/depend-iterator-1.c.jj      2018-06-12 
13:35:30.116318942 +0200
+++ gcc/testsuite/c-c++-common/gomp/depend-iterator-1.c 2018-08-01 
17:42:59.437392751 +0200
@@ -7,7 +7,7 @@ volatile int v;
 void
 foo (unsigned char i, signed char j)
 {
-  #pragma omp task depend (iterator (j=6:2:-2) : out : \
+  #pragma omp task depend (iterator (j=6:2:-2) , out : \
        arr[TEST_EQ (sizeof (j), sizeof (int)), \
            TEST_EQ (sizeof (i), sizeof (unsigned char)), \
            TEST_EQ (sizeof (k), sizeof (struct S)), j], \
@@ -17,7 +17,7 @@ foo (unsigned char i, signed char j)
        depend(out: arr[0]) \
        depend (iterator (long long i=__LONG_LONG_MAX__ - 4:__LONG_LONG_MAX__ - 
2:2, \
                          unsigned short j=~0U-16:~0U-8:3, \
-                         short *k=&arr4[1]:&arr4[2]:1) : in : \
+                         short *k=&arr4[1]:&arr4[2]:1) , in : \
        arr[TEST_EQ (sizeof (i), sizeof (long long)), \
            TEST_EQ (sizeof (j), sizeof (unsigned short)), \
            TEST_EQ (sizeof (k), sizeof (short *)), \
@@ -35,7 +35,7 @@ bar (unsigned char i, signed char j)
 {
   int m = j;
   int n = j + 2;
-  #pragma omp task depend (iterator (j=6:2:m) : out : \
+  #pragma omp task depend (iterator (j=6:2:m) , out : \
        arr[TEST_EQ (sizeof (j), sizeof (int)), \
            TEST_EQ (sizeof (i), sizeof (unsigned char)), \
            TEST_EQ (sizeof (k), sizeof (struct S)), j], \
@@ -45,7 +45,7 @@ bar (unsigned char i, signed char j)
        depend(out: arr[0]) \
        depend (iterator (long long i=__LONG_LONG_MAX__ - 4 - 
n:__LONG_LONG_MAX__ - 2:2, \
                          unsigned short j=~0U-16:~0U-8-n:3, \
-                         short *k=&arr4[1]:&arr4[n + 2]:1) : in : \
+                         short *k=&arr4[1]:&arr4[n + 2]:1) , in : \
        arr[TEST_EQ (sizeof (i), sizeof (long long)), \
            TEST_EQ (sizeof (j), sizeof (unsigned short)), \
            TEST_EQ (sizeof (k), sizeof (short *)), \
@@ -64,10 +64,10 @@ baz (void)
   #pragma omp parallel
   #pragma omp master
   {
-    #pragma omp task depend(iterator(unsigned long int k = 0 : 2) : inout : \
+    #pragma omp task depend(iterator(unsigned long int k = 0 : 2) , inout : \
        arr[TEST_EQ (sizeof (k), sizeof (unsigned long)), \
            TEST_EQ (((__typeof (k)) -1) < 0, 0), k]) \
-       depend(iterator(signed char s = -3 : -12 : -1) : out : \
+       depend(iterator(signed char s = -3 : -12 : -1) , out : \
        arr[TEST_EQ (sizeof (s), sizeof (signed char)), \
            TEST_EQ (((__typeof (s)) -1) < 0, 1), s + 12])
       v++;
--- gcc/testsuite/c-c++-common/gomp/depobj-1.c.jj       2018-06-27 
14:29:06.171462353 +0200
+++ gcc/testsuite/c-c++-common/gomp/depobj-1.c  2018-08-01 18:50:02.419513909 
+0200
@@ -14,10 +14,10 @@ f1 (void)
 {
   #pragma omp depobj(depobj) depend(in : a)
   #pragma omp depobj(depobj) update(inout)
-  #pragma omp task depend (depobj)
+  #pragma omp task depend (depobj: depobj)
   ;
   #pragma omp depobj(depobj) destroy
-  #pragma omp task depend (iterator (i=1:3) : *(depobja + i))
+  #pragma omp task depend (iterator (i=1:3) , depobj: *(depobja + i))
   ;
   #pragma omp depobj(pdepobj[0]) depend(mutexinoutset:a)
   #pragma omp depobj(*pdepobj) destroy
@@ -36,7 +36,8 @@ f2 (void)
   #pragma omp depobj (depobjb) depend(in: a)           /* { dg-error "type of 
'depobj' expression is not 'omp_depend_t'" } */
   #pragma omp depobj (pdepobj) depend(in: a)           /* { dg-error "type of 
'depobj' expression is not 'omp_depend_t'" } */
   #pragma omp depobj (a) destroy                       /* { dg-error "type of 
'depobj' expression is not 'omp_depend_t'" } */
-  #pragma omp depobj (depobj) depend(a)                        /* { dg-error 
"does not have 'omp_depend_t' type in 'depend' clause without dependence type" 
} */
+  #pragma omp depobj (depobj) depend(depobj:a)         /* { dg-error "does not 
have 'omp_depend_t' type in 'depend' clause with 'depobj' dependence type" } */
+  #pragma omp depobj (depobj) depend(depobj:*depobjb)  /* { dg-error "'depobj' 
dependence type specified in 'depend' clause on 'depobj' construct" } */
   #pragma omp depobj (depobj) update(foobar)           /* { dg-error "expected 
'in', 'out', 'inout' or 'mutexinoutset'" } */
   #pragma omp depobj (depobj) depend(in: *depobja)     /* { dg-error "should 
not have 'omp_depend_t' type in 'depend' clause with dependence type" } */
   #pragma omp depobj (depobj) depend(in: a) depend(in: b)      /* { dg-error 
"expected" } */
@@ -44,7 +45,7 @@ f2 (void)
   #pragma omp depobj (depobj) depend(in: a, b)         /* { dg-error "more 
than one locator in 'depend' clause on 'depobj' construct" } */
   #pragma omp depobj (depobj) depend(source)           /* { dg-error 
"'depend\\(source\\)' is only allowed in 'omp ordered'" } */
   #pragma omp depobj (depobj) depend(sink: i + 1, j - 1)       /* { dg-error 
"'depend\\(sink\\)' is only allowed in 'omp ordered'" } */
-  #pragma omp depobj (depobj) depend(iterator (i = 0:2) : in : a)      /* { 
dg-error "'iterator' modifier may not be specified on 'depobj' construct" } */
+  #pragma omp depobj (depobj) depend(iterator (i = 0:2) , in : a)      /* { 
dg-error "'iterator' modifier may not be specified on 'depobj' construct" } */
   if (0)
     #pragma omp depobj (depobj) destroy                        /* { dg-error 
"'#pragma omp depobj' may only be used in compound statements" } */
     ;
@@ -53,9 +54,9 @@ f2 (void)
 void
 f3 (void)
 {
-  #pragma omp task depend (depobja[1:2])               /* { dg-error "'depend' 
clause without dependence type on array section" } */
+  #pragma omp task depend (depobj: depobja[1:2])       /* { dg-error "'depend' 
clause with 'depobj' dependence type on array section" } */
   ;
-  #pragma omp task depend (a)                          /* { dg-error "'a' does 
not have 'omp_depend_t' type in 'depend' clause without dependence type" } */
+  #pragma omp task depend (depobj: a)                  /* { dg-error "'a' does 
not have 'omp_depend_t' type in 'depend' clause with 'depobj' dependence type" 
} */
   ;
   #pragma omp task depend (in: depobj)                 /* { dg-error "'depobj' 
should not have 'omp_depend_t' type in 'depend' clause with dependence type" } 
*/
   ;
--- gcc/testsuite/c-c++-common/gomp/taskwait-depend-1.c.jj      2018-06-18 
19:08:01.694245920 +0200
+++ gcc/testsuite/c-c++-common/gomp/taskwait-depend-1.c 2018-08-01 
17:40:46.906115624 +0200
@@ -1,7 +1,7 @@
 void
 foo (int *p)
 {
-  #pragma omp taskwait depend(iterator(i = 0:16) : in : p[i]) depend(out : 
p[32])
+  #pragma omp taskwait depend(iterator(i = 0:16) , in : p[i]) depend(out : 
p[32])
 }
 
 void
--- gcc/testsuite/c-c++-common/gomp/depend-iterator-2.c.jj      2018-06-28 
13:07:08.721033484 +0200
+++ gcc/testsuite/c-c++-common/gomp/depend-iterator-2.c 2018-08-01 
18:47:11.077896243 +0200
@@ -7,70 +7,70 @@ int *h;
 void
 f1 (void)
 {
-  #pragma omp task depend (iterator : in : a)  /* { dg-error "expected|invalid 
depend kind" } */
+  #pragma omp task depend (iterator , in : a)  /* { dg-error "expected" } */
   ;
-  #pragma omp task depend (iterator (for = 0 : 2) : in : a)    /* { dg-error 
"expected" } */
+  #pragma omp task depend (iterator (for = 0 : 2) , in : a)    /* { dg-error 
"expected" } */
   ;
-  #pragma omp task depend (iterator (5 = 0 : 2) : in : a)      /* { dg-error 
"expected" } */
+  #pragma omp task depend (iterator (5 = 0 : 2) , in : a)      /* { dg-error 
"expected" } */
   ;
-  #pragma omp task depend (iterator (i : 0 : 2) : in : a)      /* { dg-error 
"expected '='|name a type|expected" } */
+  #pragma omp task depend (iterator (i : 0 : 2) , in : a)      /* { dg-error 
"expected '='|name a type|expected" } */
   ;
-  #pragma omp task depend (iterator (i = 0, 1 : 2) : in : a)   /* { dg-error 
"expected" } */
+  #pragma omp task depend (iterator (i = 0, 1 : 2) , in : a)   /* { dg-error 
"expected" } */
   ;
-  #pragma omp task depend (iterator (i = (0, 1) : 2) : in : a)
+  #pragma omp task depend (iterator (i = (0, 1) : 2) , in : a)
   ;
-  #pragma omp task depend (iterator (i = 0 : 1 : 2 : 3) : in : a)      /* { 
dg-error "expected '.'" } */
+  #pragma omp task depend (iterator (i = 0 : 1 : 2 : 3) , in : a)      /* { 
dg-error "expected '.'" } */
   ;
-  #pragma omp task depend (iterator (i = 0 : 2, 3) : in : a)   /* { dg-error 
"expected" } */
+  #pragma omp task depend (iterator (i = 0 : 2, 3) , in : a)   /* { dg-error 
"expected" } */
   ;
-  #pragma omp task depend (iterator (i = 0 : 10 : 2, 3) : in : a)      /* { 
dg-error "expected" } */
+  #pragma omp task depend (iterator (i = 0 : 10 : 2, 3) , in : a)      /* { 
dg-error "expected" } */
   ;
-  #pragma omp task depend (iterator (i = 0:1), iterator (j = 0:1) : in : a)    
/* { dg-error "expected ':'|invalid depend kind|'iterator' undeclared|was not 
declared|expected '\\)' before ':' token" } */
+  #pragma omp task depend (iterator (i = 0:1), iterator (j = 0:1) , in : a)    
/* { dg-error "invalid depend kind" } */
   ;
-  #pragma omp task depend (iterator (i = 0:32) : in : b[i*2:2])
+  #pragma omp task depend (iterator (i = 0:32) , in : b[i*2:2])
   ;
-  #pragma omp task depend (iterator (struct S i = 0:1): in : a)                
/* { dg-error "iterator 'i' has neither integral nor pointer type" } */
+  #pragma omp task depend (iterator (struct S i = 0:1), in : a)                
/* { dg-error "iterator 'i' has neither integral nor pointer type" } */
   ;
-  #pragma omp task depend (iterator (void i = 0:1) : in : a)           /* { 
dg-error "iterator 'i' has neither integral nor pointer type" } */
+  #pragma omp task depend (iterator (void i = 0:1) , in : a)           /* { 
dg-error "iterator 'i' has neither integral nor pointer type" } */
   ;
-  #pragma omp task depend (iterator (float f = 0.2:0.4) : in : a)      /* { 
dg-error "iterator 'f' has neither integral nor pointer type" } */
+  #pragma omp task depend (iterator (float f = 0.2:0.4) , in : a)      /* { 
dg-error "iterator 'f' has neither integral nor pointer type" } */
   ;
-  #pragma omp task depend (iterator (struct S *p = d:e:2) : in : a)
+  #pragma omp task depend (iterator (struct S *p = d:e:2) , in : a)
   ;
-  #pragma omp task depend (iterator (struct T *p = f:g) : in : a)      /* { 
dg-error "invalid use of" } */
+  #pragma omp task depend (iterator (struct T *p = f:g) , in : a)      /* { 
dg-error "invalid use of" } */
   ;
   #pragma omp task depend (iterator (int i = 0:4, \
-                                    struct U { int (*p)[i + 2]; } *p = 0:2) : 
in : a)  /* { dg-error "type of iterator 'p' refers to outer iterator 'i'" "" { 
target c } } */
+                                    struct U { int (*p)[i + 2]; } *p = 0:2) , 
in : a)  /* { dg-error "type of iterator 'p' refers to outer iterator 'i'" "" { 
target c } } */
   ;                                                                    /* { 
dg-error "types may not be defined in iterator type|not an integer constant" "" 
{ target c++ } .-1 } */
-  #pragma omp task depend (iterator (i = 0:4, j = i:16) : in : a)      /* { 
dg-error "begin expression refers to outer iterator 'i'" } */
+  #pragma omp task depend (iterator (i = 0:4, j = i:16) , in : a)      /* { 
dg-error "begin expression refers to outer iterator 'i'" } */
   ;
-  #pragma omp task depend (iterator (i = 0:4, j = 2:i:1) : in : a)     /* { 
dg-error "end expression refers to outer iterator 'i'" } */
+  #pragma omp task depend (iterator (i = 0:4, j = 2:i:1) , in : a)     /* { 
dg-error "end expression refers to outer iterator 'i'" } */
   ;
-  #pragma omp task depend (iterator (i = 0:4, j = 2:8:i) : in : a)     /* { 
dg-error "step expression refers to outer iterator 'i'" } */
+  #pragma omp task depend (iterator (i = 0:4, j = 2:8:i) , in : a)     /* { 
dg-error "step expression refers to outer iterator 'i'" } */
   ;
-  #pragma omp task depend (iterator (i = *d:2) : in : a)       /* { dg-error 
"aggregate value used where an integer was expected" "" { target c } } */
+  #pragma omp task depend (iterator (i = *d:2) , in : a)       /* { dg-error 
"aggregate value used where an integer was expected" "" { target c } } */
   ;                                                            /* { dg-error 
"invalid cast from type 'S' to type 'int'" "" { target c++ } .-1 } */
-  #pragma omp task depend (iterator (i = 2:*d:2) : in : a)     /* { dg-error 
"aggregate value used where an integer was expected" "" { target c } } */
+  #pragma omp task depend (iterator (i = 2:*d:2) , in : a)     /* { dg-error 
"aggregate value used where an integer was expected" "" { target c } } */
   ;                                                            /* { dg-error 
"invalid cast from type 'S' to type 'int'" "" { target c++ } .-1 } */
-  #pragma omp task depend (iterator (i = 2:4:*d) : in : a)     /* { dg-error 
"aggregate value used where an integer was expected" "" { target c } } */
+  #pragma omp task depend (iterator (i = 2:4:*d) , in : a)     /* { dg-error 
"aggregate value used where an integer was expected" "" { target c } } */
   ;                                                            /* { dg-error 
"invalid cast from type 'S' to type 'int'" "" { target c++ } .-1 } */
                                                                /* { dg-error 
"iterator 'i' has zero step" "" { target c } .-2 } */
-  #pragma omp task depend (iterator (i = 1.25:2.5:3.5) : in : a)
+  #pragma omp task depend (iterator (i = 1.25:2.5:3.5) , in : a)
   ;
-  #pragma omp task depend (iterator (int *p = 23 : h) : in : a)
+  #pragma omp task depend (iterator (int *p = 23 : h) , in : a)
   ;
-  #pragma omp task depend (iterator (short i=1:3:0) : in : a)  /* { dg-error 
"iterator 'i' has zero step" } */
+  #pragma omp task depend (iterator (short i=1:3:0) , in : a)  /* { dg-error 
"iterator 'i' has zero step" } */
   ;
-  #pragma omp task depend (iterator (i = 1 : 3 : 3 - 3) : in : a)      /* { 
dg-error "iterator 'i' has zero step" } */
+  #pragma omp task depend (iterator (i = 1 : 3 : 3 - 3) , in : a)      /* { 
dg-error "iterator 'i' has zero step" } */
   ;
-  #pragma omp task depend (iterator (int *p = &b[6]:&b[9]:4 - 4) : in : a)     
/* { dg-error "iterator 'p' has zero step" } */
+  #pragma omp task depend (iterator (int *p = &b[6]:&b[9]:4 - 4) , in : a)     
/* { dg-error "iterator 'p' has zero step" } */
   ;
-  #pragma omp task depend (iterator (const int i = 0 : 2) : in : a)    /* { 
dg-error "const qualified" } */
+  #pragma omp task depend (iterator (const int i = 0 : 2) , in : a)    /* { 
dg-error "const qualified" } */
   ;
-  #pragma omp task depend (iterator (const long long unsigned i = 0 : 2) : in 
: a)     /* { dg-error "const qualified" } */
+  #pragma omp task depend (iterator (const long long unsigned i = 0 : 2) , in 
: a)     /* { dg-error "const qualified" } */
   ;
 #if !defined (__cplusplus) && __STDC_VERSION__ >= 201112L
-  #pragma omp task depend (iterator (_Atomic unsigned i = 0 : 2) : in : a)     
/* { dg-error "_Atomic" "" { target c } } */
+  #pragma omp task depend (iterator (_Atomic unsigned i = 0 : 2) , in : a)     
/* { dg-error "_Atomic" "" { target c } } */
   ;
 #endif
 }
@@ -83,14 +83,14 @@ f2 (void)
   for (i = 0; i < 64; i++)
     for (j = 0; j < 64; j++)
       {
-      #pragma omp ordered depend (iterator (k=0:1) : sink: i - 1, j - 1)       
/* { dg-error "'iterator' modifier incompatible with 'sink'" } */
-      #pragma omp ordered depend (iterator (int l = 0:2:3) : source)           
/* { dg-error "'iterator' modifier incompatible with 'source'" } */
+      #pragma omp ordered depend (iterator (k=0:1) , sink: i - 1, j - 1)       
/* { dg-error "'iterator' modifier incompatible with 'sink'" } */
+      #pragma omp ordered depend (iterator (int l = 0:2:3) , source)           
/* { dg-error "'iterator' modifier incompatible with 'source'" } */
       }
 }
 
 void
 f3 (void)
 {
-  #pragma omp task depend (iterator (i = 0:1): iterator (j = 0:1) : in : a)    
/* { dg-error "invalid depend kind|'iterator' undeclared|was not 
declared|expected '\\)' before ':' token" } */
+  #pragma omp task depend (iterator (i = 0:1), iterator (j = 0:1) , in : a)    
/* { dg-error "invalid depend kind" } */
   ;
 }
--- gcc/testsuite/g++.dg/gomp/depend-iterator-1.C.jj    2018-06-13 
18:36:35.959238977 +0200
+++ gcc/testsuite/g++.dg/gomp/depend-iterator-1.C       2018-08-01 
17:52:55.254711296 +0200
@@ -8,7 +8,7 @@ template <typename T, typename U, typena
 void
 foo (unsigned char i, signed char j)
 {
-  #pragma omp task depend (iterator (T j=6:N:-2) : out : \
+  #pragma omp task depend (iterator (T j=6:N:-2) , out : \
        arr[TEST_EQ (sizeof (j), sizeof (int)), \
            TEST_EQ (sizeof (i), sizeof (unsigned char)), \
            TEST_EQ (sizeof (k), sizeof (struct S)), j], \
@@ -18,7 +18,7 @@ foo (unsigned char i, signed char j)
        depend(out: arr[0]) \
        depend (iterator (U i=__LONG_LONG_MAX__ - 4:__LONG_LONG_MAX__ - N:N, \
                          V j=~0U-16:~0U-8:3, \
-                         W *k=&arr4[1]:&arr4[2]:1) : in : \
+                         W *k=&arr4[1]:&arr4[2]:1) , in : \
        arr[TEST_EQ (sizeof (i), sizeof (long long)), \
            TEST_EQ (sizeof (j), sizeof (unsigned short)), \
            TEST_EQ (sizeof (k), sizeof (short *)), \
@@ -37,7 +37,7 @@ bar (unsigned char i, signed char j)
 {
   int m = j;
   int n = j + 2;
-  #pragma omp task depend (iterator (j=N:2:m) : out : \
+  #pragma omp task depend (iterator (j=N:2:m) , out : \
        arr[TEST_EQ (sizeof (j), sizeof (int)), \
            TEST_EQ (sizeof (i), sizeof (unsigned char)), \
            TEST_EQ (sizeof (k), sizeof (struct S)), j], \
@@ -47,7 +47,7 @@ bar (unsigned char i, signed char j)
        depend(out: arr[0]) \
        depend (iterator (U i=__LONG_LONG_MAX__ - 4 - n:__LONG_LONG_MAX__ - 
2:2, \
                          unsigned short j=~0U-16:~0U-8-n:3, \
-                         W k=&arr4[N-5]:&arr4[n + 2]:1) : in : \
+                         W k=&arr4[N-5]:&arr4[n + 2]:1) , in : \
        arr[TEST_EQ (sizeof (i), sizeof (long long)), \
            TEST_EQ (sizeof (j), sizeof (unsigned short)), \
            TEST_EQ (sizeof (k), sizeof (short *)), \
@@ -67,10 +67,10 @@ baz (void)
   #pragma omp parallel
   #pragma omp master
   {
-    #pragma omp task depend(iterator(T k = N : 2) : inout : \
+    #pragma omp task depend(iterator(T k = N : 2) , inout : \
        arr[TEST_EQ (sizeof (k), sizeof (unsigned long)), \
            TEST_EQ (((__typeof (k)) -1) < N, 0), k]) \
-       depend(iterator(U s = -3 : -12 : -1 + N) : out : \
+       depend(iterator(U s = -3 : -12 : -1 + N) , out : \
        arr[TEST_EQ (sizeof (s), sizeof (signed char)), \
            TEST_EQ (((__typeof (s)) -1) < 0, 1), s + 12])
       v++;
--- gcc/testsuite/g++.dg/gomp/depend-iterator-2.C.jj    2018-06-28 
13:09:34.557143914 +0200
+++ gcc/testsuite/g++.dg/gomp/depend-iterator-2.C       2018-08-01 
18:47:23.250933990 +0200
@@ -8,48 +8,48 @@ template <typename U, typename V, typena
 void
 f1 ()
 {
-  #pragma omp task depend (iterator : in : a)  // { dg-error "expected|invalid 
depend kind" }
+  #pragma omp task depend (iterator , in : a)  // { dg-error "expected" }
   ;
-  #pragma omp task depend (iterator (for = 0 : 2) : in : a)    // { dg-error 
"expected" }
+  #pragma omp task depend (iterator (for = 0 : 2) , in : a)    // { dg-error 
"expected" }
   ;
-  #pragma omp task depend (iterator (5 = 0 : 2) : in : a)      // { dg-error 
"expected" }
+  #pragma omp task depend (iterator (5 = 0 : 2) , in : a)      // { dg-error 
"expected" }
   ;
-  #pragma omp task depend (iterator (i : N : 2) : in : a)      // { dg-error 
"expected '='|name a type|expected" }
+  #pragma omp task depend (iterator (i : N : 2) , in : a)      // { dg-error 
"expected '='|name a type|expected" }
   ;
-  #pragma omp task depend (iterator (i = 0, 1 : 2) : in : a)   // { dg-error 
"expected" }
+  #pragma omp task depend (iterator (i = 0, 1 : 2) , in : a)   // { dg-error 
"expected" }
   ;
-  #pragma omp task depend (iterator (i = (0, 1) : 2) : in : a)
+  #pragma omp task depend (iterator (i = (0, 1) : 2) , in : a)
   ;
-  #pragma omp task depend (iterator (i = 0 : 1 : 2 : 3) : in : a)      // { 
dg-error "expected '.'" }
+  #pragma omp task depend (iterator (i = 0 : 1 : 2 : 3) , in : a)      // { 
dg-error "expected '.'" }
   ;
-  #pragma omp task depend (iterator (i = 0 : 2, 3) : in : a)   // { dg-error 
"expected" }
+  #pragma omp task depend (iterator (i = 0 : 2, 3) , in : a)   // { dg-error 
"expected" }
   ;
-  #pragma omp task depend (iterator (i = N : 10 : 2, 3) : in : a)      // { 
dg-error "expected" }
+  #pragma omp task depend (iterator (i = N : 10 : 2, 3) , in : a)      // { 
dg-error "expected" }
   ;
-  #pragma omp task depend (iterator (i = 0:1), iterator (j = 0:1) : in : a)    
// { dg-error "expected ':'|invalid depend kind|was not declared|expected '\\)' 
before ':' token" }
+  #pragma omp task depend (iterator (i = 0:1), iterator (j = 0:1) , in : a)    
// { dg-error "invalid depend kind" }
   ;
-  #pragma omp task depend (iterator (i = N:32) : in : b[i*2:2])
+  #pragma omp task depend (iterator (i = N:32) , in : b[i*2:2])
   ;
-  #pragma omp task depend (iterator (void i = 0:1) : in : a)           // { 
dg-error "iterator 'i' has neither integral nor pointer type" }
+  #pragma omp task depend (iterator (void i = 0:1) , in : a)           // { 
dg-error "iterator 'i' has neither integral nor pointer type" }
   ;
-  #pragma omp task depend (iterator (U *p = d:e:2) : in : a)
+  #pragma omp task depend (iterator (U *p = d:e:2) , in : a)
   ;
   #pragma omp task depend (iterator (W i = N:4, \
-                                    struct U2 { W *p; } *p = 0:2) : in : a) // 
{ dg-error "types may not be defined in iterator type" }
+                                    struct U2 { W *p; } *p = 0:2) , in : a) // 
{ dg-error "types may not be defined in iterator type" }
   ;
-  #pragma omp task depend (iterator (i = 0:4, j = i:16) : in : a)      // { 
dg-error "begin expression refers to outer iterator 'i'" }
+  #pragma omp task depend (iterator (i = 0:4, j = i:16) , in : a)      // { 
dg-error "begin expression refers to outer iterator 'i'" }
   ;
-  #pragma omp task depend (iterator (i = N:4, j = 2:i:1) : in : a)     // { 
dg-error "end expression refers to outer iterator 'i'" }
+  #pragma omp task depend (iterator (i = N:4, j = 2:i:1) , in : a)     // { 
dg-error "end expression refers to outer iterator 'i'" }
   ;
-  #pragma omp task depend (iterator (i = 0:4, j = 2:8:i) : in : a)     // { 
dg-error "step expression refers to outer iterator 'i'" }
+  #pragma omp task depend (iterator (i = 0:4, j = 2:8:i) , in : a)     // { 
dg-error "step expression refers to outer iterator 'i'" }
   ;
-  #pragma omp task depend (iterator (i = 1.25:2.5:3.5) : in : a)
+  #pragma omp task depend (iterator (i = 1.25:2.5:3.5) , in : a)
   ;
-  #pragma omp task depend (iterator (W *p = 23 : h) : in : a)
+  #pragma omp task depend (iterator (W *p = 23 : h) , in : a)
   ;
-  #pragma omp task depend (iterator (const int i = N : 2) : in : a)    // { 
dg-error "const qualified" }
+  #pragma omp task depend (iterator (const int i = N : 2) , in : a)    // { 
dg-error "const qualified" }
   ;
-  #pragma omp task depend (iterator (const long long unsigned i = 0 : 2) : in 
: a)     // { dg-error "const qualified" }
+  #pragma omp task depend (iterator (const long long unsigned i = 0 : 2) , in 
: a)     // { dg-error "const qualified" }
   ;
 }
 
@@ -62,8 +62,8 @@ f2 ()
   for (i = 0; i < 64; i++)
     for (j = 0; j < 64; j++)
       {
-      #pragma omp ordered depend (iterator (k=0:N) : sink: i - 1, j - 1)       
// { dg-error "'iterator' modifier incompatible with 'sink'" }
-      #pragma omp ordered depend (iterator (W l = 0:2:3) : source)             
// { dg-error "'iterator' modifier incompatible with 'source'" }
+      #pragma omp ordered depend (iterator (k=0:N) , sink: i - 1, j - 1)       
// { dg-error "'iterator' modifier incompatible with 'sink'" }
+      #pragma omp ordered depend (iterator (W l = 0:2:3) , source)             
// { dg-error "'iterator' modifier incompatible with 'source'" }
       }
 }
 
@@ -71,31 +71,31 @@ template <typename U, typename V, typena
 void
 f3 ()
 {
-  #pragma omp task depend (iterator (U i = 0:1): in : a)               // { 
dg-error "iterator 'i' has neither integral nor pointer type" }
+  #pragma omp task depend (iterator (U i = 0:1), in : a)               // { 
dg-error "iterator 'i' has neither integral nor pointer type" }
   ;
-  #pragma omp task depend (iterator (V f = 0.2:0.4) : in : a)  // { dg-error 
"iterator 'f' has neither integral nor pointer type" }
+  #pragma omp task depend (iterator (V f = 0.2:0.4) , in : a)  // { dg-error 
"iterator 'f' has neither integral nor pointer type" }
   ;
-  #pragma omp task depend (iterator (struct T *p = f:g) : in : a)      // { 
dg-error "invalid use of" }
+  #pragma omp task depend (iterator (struct T *p = f:g) , in : a)      // { 
dg-error "invalid use of" }
   ;
-  #pragma omp task depend (iterator (i = *d:2) : in : a)       // { dg-error 
"invalid cast from type 'S' to type 'int'" }
+  #pragma omp task depend (iterator (i = *d:2) , in : a)       // { dg-error 
"invalid cast from type 'S' to type 'int'" }
   ;
-  #pragma omp task depend (iterator (i = 2:*d:2) : in : a)     // { dg-error 
"invalid cast from type 'S' to type 'int'" }
+  #pragma omp task depend (iterator (i = 2:*d:2) , in : a)     // { dg-error 
"invalid cast from type 'S' to type 'int'" }
   ;
-  #pragma omp task depend (iterator (i = 2:4:*d) : in : a)     // { dg-error 
"invalid cast from type 'S' to type 'int'" }
+  #pragma omp task depend (iterator (i = 2:4:*d) , in : a)     // { dg-error 
"invalid cast from type 'S' to type 'int'" }
   ;
-  #pragma omp task depend (iterator (i = 1.25:2.5:3.5) : in : a)
+  #pragma omp task depend (iterator (i = 1.25:2.5:3.5) , in : a)
   ;
-  #pragma omp task depend (iterator (W *p = 23 : h) : in : a)
+  #pragma omp task depend (iterator (W *p = 23 : h) , in : a)
   ;
-  #pragma omp task depend (iterator (short i=1:3:N) : in : a)  // { dg-error 
"iterator 'i' has zero step" }
+  #pragma omp task depend (iterator (short i=1:3:N) , in : a)  // { dg-error 
"iterator 'i' has zero step" }
   ;
-  #pragma omp task depend (iterator (i = 1 : 3 : N + 3 - 3) : in : a)  // { 
dg-error "iterator 'i' has zero step" }
+  #pragma omp task depend (iterator (i = 1 : 3 : N + 3 - 3) , in : a)  // { 
dg-error "iterator 'i' has zero step" }
   ;
-  #pragma omp task depend (iterator (int *p = &b[6]:&b[9]:4 - 4) : in : a)     
// { dg-error "iterator 'p' has zero step" }
+  #pragma omp task depend (iterator (int *p = &b[6]:&b[9]:4 - 4) , in : a)     
// { dg-error "iterator 'p' has zero step" }
   ;
-  #pragma omp task depend (iterator (X i = N : 2) : in : a)    // { dg-error 
"const qualified" }
+  #pragma omp task depend (iterator (X i = N : 2) , in : a)    // { dg-error 
"const qualified" }
   ;
-  #pragma omp task depend (iterator (Y i = 0 : 2) : in : a)    // { dg-error 
"const qualified" }
+  #pragma omp task depend (iterator (Y i = 0 : 2) , in : a)    // { dg-error 
"const qualified" }
   ;
 }
 
@@ -103,7 +103,7 @@ template <int N>
 void
 f4 ()
 {
-  #pragma omp task depend (iterator (i = 0:1): iterator (j = 0:1) : in : a)    
// { dg-error "invalid depend kind|was not declared|expected '\\)' before ':' 
token" }
+  #pragma omp task depend (iterator (i = 0:1), iterator (j = 0:1) , in : a)    
// { dg-error "invalid depend kind" }
   ;
 }
 
--- gcc/testsuite/g++.dg/gomp/depobj-1.C.jj     2018-06-28 14:43:21.164853650 
+0200
+++ gcc/testsuite/g++.dg/gomp/depobj-1.C        2018-08-01 18:50:56.669784456 
+0200
@@ -15,10 +15,10 @@ f1 (bool x)
 {
   #pragma omp depobj(x ? depobj : depobj4) depend(in : x ? a : b)
   #pragma omp depobj(x ? depobj : depobj4) update(inout)
-  #pragma omp task depend (depobj)
+  #pragma omp task depend (depobj:depobj)
   ;
   #pragma omp depobj(depobj) destroy
-  #pragma omp task depend (iterator (i=1:3) : *(depobja + i))
+  #pragma omp task depend (iterator (i=1:3) , depobj: *(depobja + i))
   ;
   #pragma omp depobj(pdepobj[0]) depend(mutexinoutset:a)
   #pragma omp depobj(*pdepobj) destroy
@@ -32,24 +32,24 @@ f2 (T &depobj2, T2 depobj3, T *pdepobj)
   T depobja[4];
   #pragma omp depobj(depobj1) depend(in : --a)
   #pragma omp depobj(depobj1) update(inout)
-  #pragma omp task depend (depobj1)
+  #pragma omp task depend (depobj: depobj1)
   ;
   #pragma omp depobj(depobj1) destroy
   #pragma omp depobj(depobj2) depend(in : a)
   #pragma omp depobj(depobj2) update(inout)
-  #pragma omp task depend (depobj2)
+  #pragma omp task depend (depobj :depobj2)
   ;
   #pragma omp depobj(depobj2) destroy
   #pragma omp depobj(depobj3) depend(in : a)
   #pragma omp depobj(depobj3) update(inout)
-  #pragma omp task depend (depobj3)
+  #pragma omp task depend (depobj  :  depobj3)
   ;
   #pragma omp depobj(depobj3) destroy
   for (int q = 1; q < 3; q++)
     {
       #pragma omp depobj(depobja[q]) depend (in:a)
     }
-  #pragma omp task depend (iterator (i=1:3) : *(depobja + i))
+  #pragma omp task depend (iterator (i=1:3) , depobj : *(depobja + i))
   ;
   for (int q = 1; q < 3; q++)
     {
@@ -81,7 +81,8 @@ f4 (void)
   #pragma omp depobj (depobjb) depend(in: a)           // { dg-error "type of 
'depobj' expression is not 'omp_depend_t'" }
   #pragma omp depobj (pdepobj) depend(in: a)           // { dg-error "type of 
'depobj' expression is not 'omp_depend_t'" }
   #pragma omp depobj (a) destroy                       // { dg-error "type of 
'depobj' expression is not 'omp_depend_t'" }
-  #pragma omp depobj (depobj) depend(a)                        // { dg-error 
"does not have 'omp_depend_t' type in 'depend' clause without dependence type" }
+  #pragma omp depobj (depobj) depend(depobj:a)         // { dg-error "does not 
have 'omp_depend_t' type in 'depend' clause with 'depobj' dependence type" }
+  #pragma omp depobj (depobj) depend(depobj:*depobjb)  // { dg-error "'depobj' 
dependence type specified in 'depend' clause on 'depobj' construct" }
   #pragma omp depobj (depobj) update(foobar)           // { dg-error "expected 
'in', 'out', 'inout' or 'mutexinoutset'" }
   #pragma omp depobj (depobj) depend(in: *depobja)     // { dg-error "should 
not have 'omp_depend_t' type in 'depend' clause with dependence type" }
   #pragma omp depobj (depobj) depend(in: a) depend(in: b)      // { dg-error 
"expected" }
@@ -89,7 +90,7 @@ f4 (void)
   #pragma omp depobj (depobj) depend(in: a, b)         // { dg-error "more 
than one locator in 'depend' clause on 'depobj' construct" }
   #pragma omp depobj (depobj) depend(source)           // { dg-error 
"'depend\\(source\\)' is only allowed in 'omp ordered'" }
   #pragma omp depobj (depobj) depend(sink: i + 1, j - 1)       // { dg-error 
"'depend\\(sink\\)' is only allowed in 'omp ordered'" }
-  #pragma omp depobj (depobj) depend(iterator (i = 0:2) : in : a)      // { 
dg-error "'iterator' modifier may not be specified on 'depobj' construct" }
+  #pragma omp depobj (depobj) depend(iterator (i = 0:2) , in : a)      // { 
dg-error "'iterator' modifier may not be specified on 'depobj' construct" }
   if (0)
     #pragma omp depobj (depobj) destroy                        // { dg-error 
"'#pragma omp depobj' may only be used in compound statements" }
     ;
@@ -99,9 +100,9 @@ template <int N>
 void
 f5 (void)
 {
-  #pragma omp task depend (depobja[1:2])               // { dg-error "'depend' 
clause without dependence type on array section" }
+  #pragma omp task depend (depobj:depobja[1:2])                // { dg-error 
"'depend' clause with 'depobj' dependence type on array section" }
   ;
-  #pragma omp task depend (a)                          // { dg-error "'a' does 
not have 'omp_depend_t' type in 'depend' clause without dependence type" }
+  #pragma omp task depend (depobj : a)                 // { dg-error "'a' does 
not have 'omp_depend_t' type in 'depend' clause with 'depobj' dependence type" }
   ;
   #pragma omp task depend (in: depobj)                 // { dg-error "'depobj' 
should not have 'omp_depend_t' type in 'depend' clause with dependence type" }
   ;
--- libgomp/testsuite/libgomp.c-c++-common/depend-iterator-1.c.jj       
2018-06-12 14:39:09.759522148 +0200
+++ libgomp/testsuite/libgomp.c-c++-common/depend-iterator-1.c  2018-08-01 
18:03:26.037649407 +0200
@@ -57,16 +57,16 @@ main ()
   {
     int i;
     for (i = 0; i < 64; i++)
-      #pragma omp task depend (iterator (j=i:i+1) : out : foo (1, j, 0)[0])
+      #pragma omp task depend (iterator (j=i:i+1) , out : foo (1, j, 0)[0])
        arr[i] = i;
-    #pragma omp task depend (iterator (int k=beg:end:step,long int l=0:4:1) : 
inout : \
+    #pragma omp task depend (iterator (int k=beg:end:step,long int l=0:4:1) , 
inout : \
                             foo (2, k, l)[0], foo (3, l, k)[0]) private (i)
     for (i = 0; i < 64; i++)
       if (arr[i] != i)
        abort ();
       else
        arr[i] = arr[i] + 1;
-    #pragma omp task depend (iterator (int *p=&arr3[64]:&arr3[0]:-1) : in : \
+    #pragma omp task depend (iterator (int *p=&arr3[64]:&arr3[0]:-1) , in : \
                             foo (4, 0, p - &arr3[0])[0]) depend (in : beg)
     for (i = 0; i < 64; i++)
       if (arr[i] != i + 1)
--- libgomp/testsuite/libgomp.c-c++-common/depend-iterator-2.c.jj       
2018-06-27 11:45:24.525508965 +0200
+++ libgomp/testsuite/libgomp.c-c++-common/depend-iterator-2.c  2018-08-01 
18:03:50.780725430 +0200
@@ -19,37 +19,37 @@ foo (int *p, int i)
   v++;
   #pragma omp task depend (mutexinoutset: p[0]) depend (out: p[1])
   v++;
-  #pragma omp task depend (iterator (j=0:2) : out : p[j])
+  #pragma omp task depend (iterator (j=0:2) , out : p[j])
   v++;
-  #pragma omp task depend (iterator (j=0:2) : in : p[j])
+  #pragma omp task depend (iterator (j=0:2) , in : p[j])
   v++;
-  #pragma omp task depend (iterator (j=0:2) : inout : p[j])
+  #pragma omp task depend (iterator (j=0:2) , inout : p[j])
   v++;
-  #pragma omp task depend (iterator (j=0:2) : mutexinoutset : p[j])
+  #pragma omp task depend (iterator (j=0:2) , mutexinoutset : p[j])
   v++;
-  #pragma omp task depend (iterator (j=0:2) : out : p[j]) depend (iterator 
(j=0:2) : in : p[j + 2])
+  #pragma omp task depend (iterator (j=0:2) , out : p[j]) depend (iterator 
(j=0:2) , in : p[j + 2])
   v++;
-  #pragma omp task depend (iterator (j=0:2) : in : p[j]) depend (iterator 
(j=0:2) : inout : p[j + 2])
+  #pragma omp task depend (iterator (j=0:2) , in : p[j]) depend (iterator 
(j=0:2) , inout : p[j + 2])
   v++;
-  #pragma omp task depend (iterator (j=0:2) : inout : p[j]) depend (iterator 
(j=0:2) : mutexinoutset : p[j + 2])
+  #pragma omp task depend (iterator (j=0:2) , inout : p[j]) depend (iterator 
(j=0:2) , mutexinoutset : p[j + 2])
   v++;
-  #pragma omp task depend (iterator (j=0:2) : mutexinoutset : p[j]) depend 
(iterator (j=0:2) : out : p[j + 2])
+  #pragma omp task depend (iterator (j=0:2) , mutexinoutset : p[j]) depend 
(iterator (j=0:2) , out : p[j + 2])
   v++;
-  #pragma omp task depend (iterator (j=0:i) : out : p[j])
+  #pragma omp task depend (iterator (j=0:i) , out : p[j])
   v++;
-  #pragma omp task depend (iterator (j=0:i) : in : p[j])
+  #pragma omp task depend (iterator (j=0:i) , in : p[j])
   v++;
-  #pragma omp task depend (iterator (j=0:i) : inout : p[j])
+  #pragma omp task depend (iterator (j=0:i) , inout : p[j])
   v++;
-  #pragma omp task depend (iterator (j=0:i) : mutexinoutset : p[j])
+  #pragma omp task depend (iterator (j=0:i) , mutexinoutset : p[j])
   v++;
-  #pragma omp task depend (iterator (j=0:i) : out : p[j]) depend (iterator 
(j=0:i) : in : p[j + 2])
+  #pragma omp task depend (iterator (j=0:i) , out : p[j]) depend (iterator 
(j=0:i) , in : p[j + 2])
   v++;
-  #pragma omp task depend (iterator (j=0:i) : in : p[j]) depend (iterator 
(j=0:i) : inout : p[j + 2])
+  #pragma omp task depend (iterator (j=0:i) , in : p[j]) depend (iterator 
(j=0:i) , inout : p[j + 2])
   v++;
-  #pragma omp task depend (iterator (j=0:i) : inout : p[j]) depend (iterator 
(j=0:i) : mutexinoutset : p[j + 2])
+  #pragma omp task depend (iterator (j=0:i) , inout : p[j]) depend (iterator 
(j=0:i) , mutexinoutset : p[j + 2])
   v++;
-  #pragma omp task depend (iterator (j=0:i) : mutexinoutset : p[j]) depend 
(iterator (j=0:i) : out : p[j + 2])
+  #pragma omp task depend (iterator (j=0:i) , mutexinoutset : p[j]) depend 
(iterator (j=0:i) , out : p[j + 2])
   v++;
 }
 
--- libgomp/testsuite/libgomp.c-c++-common/depobj-1.c.jj        2018-06-27 
15:47:09.637231807 +0200
+++ libgomp/testsuite/libgomp.c-c++-common/depobj-1.c   2018-08-01 
18:04:56.780928222 +0200
@@ -12,9 +12,9 @@ dep (void)
   #pragma omp parallel
   #pragma omp single
   {
-    #pragma omp task shared (x) depend(d2)
+    #pragma omp task shared (x) depend(depobj: d2)
     x = 2;
-    #pragma omp task shared (x) depend(d1)
+    #pragma omp task shared (x) depend(depobj: d1)
     if (x != 2)
       abort ();
   }
@@ -33,9 +33,9 @@ dep2 (void)
     #pragma omp depobj (d1) depend(out: x)
     #pragma omp depobj (*&d2) depend (in:x)
     #pragma omp depobj(d2)update(in)
-    #pragma omp task shared (x) depend(d1)
+    #pragma omp task shared (x) depend(depobj:d1)
     x = 2;
-    #pragma omp task shared (x) depend(d2)
+    #pragma omp task shared (x) depend(depobj : d2)
     if (x != 2)
       abort ();
     #pragma omp taskwait
@@ -55,9 +55,9 @@ dep3 (void)
     {
       #pragma omp depobj(d[0]) depend(out:x)
       #pragma omp depobj(d[1]) depend(in: x)
-      #pragma omp task shared (x) depend(*d)
+      #pragma omp task shared (x) depend(depobj: *d)
       x = 2;
-      #pragma omp task shared (x) depend(*(d + 1))
+      #pragma omp task shared (x) depend(depobj: *(d + 1))
       if (x != 2)
        abort ();
     }
@@ -76,10 +76,10 @@ antidep (void)
   #pragma omp parallel
   #pragma omp single
   {
-    #pragma omp task shared(xx) depend(dd2)
+    #pragma omp task shared(xx) depend(depobj:dd2)
     if (xx != 1)
       abort ();
-    #pragma omp task shared(xx) depend(dd1)
+    #pragma omp task shared(xx) depend(depobj:dd1)
     xx = 2;
   }
 }
--- libgomp/testsuite/libgomp.c++/depend-iterator-1.C.jj        2018-06-13 
18:07:09.183618914 +0200
+++ libgomp/testsuite/libgomp.c++/depend-iterator-1.C   2018-08-01 
18:05:47.080082763 +0200
@@ -51,16 +51,16 @@ bar ()
   {
     int i;
     for (i = 0; i < 64; i++)
-      #pragma omp task depend (iterator (j=i:i+1) : out : foo (1, j, 0)[0])
+      #pragma omp task depend (iterator (j=i:i+1) , out : foo (1, j, 0)[0])
        arr[i] = i;
-    #pragma omp task depend (iterator (int k=beg:end:step,long int l=0:4:1) : 
inout : \
+    #pragma omp task depend (iterator (int k=beg:end:step,long int l=0:4:1) , 
inout : \
                             foo (2, k, l)[0], foo (3, l, k)[0]) private (i)
     for (i = 0; i < 64; i++)
       if (arr[i] != i)
        abort ();
       else
        arr[i] = arr[i] + 1;
-    #pragma omp task depend (iterator (int *p=&arr3[64]:&arr3[0]:-1) : in : \
+    #pragma omp task depend (iterator (int *p=&arr3[64]:&arr3[0]:-1), in : \
                             foo (4, 0, p - &arr3[0])[0]) depend (in : beg)
     for (i = 0; i < 64; i++)
       if (arr[i] != i + 1)
@@ -79,16 +79,16 @@ baz (A beg, A end, A step)
   {
     int i;
     for (i = 0; i < 64; i++)
-      #pragma omp task depend (iterator (A j=i:i+1) : out : foo (1, j, 0)[0])
+      #pragma omp task depend (iterator (A j=i:i+1),out : foo (1, j, 0)[0])
        arr[i] = i;
-    #pragma omp task depend (iterator (A k=beg:end:step,B l=0:4:1) : inout : \
+    #pragma omp task depend (iterator (A k=beg:end:step,B l=0:4:1), inout : \
                             foo (2, k, l)[0], foo (3, l, k)[0]) private (i)
     for (i = 0; i < 64; i++)
       if (arr[i] != i)
        abort ();
       else
        arr[i] = arr[i] + 1;
-    #pragma omp task depend (iterator (C p=&arr3[64]:&arr3[0]:-1) : in : \
+    #pragma omp task depend (iterator (C p=&arr3[64]:&arr3[0]:-1), in : \
                             foo (4, 0, p - &arr3[0])[0]) depend (in : beg)
     for (i = 0; i < 64; i++)
       if (arr[i] != i + 1)
--- libgomp/testsuite/libgomp.c++/depobj-1.C.jj 2018-06-28 15:38:44.035632853 
+0200
+++ libgomp/testsuite/libgomp.c++/depobj-1.C    2018-08-01 19:04:43.166439001 
+0200
@@ -12,9 +12,9 @@ dep (omp_depend_t &d1, omp_depend_t *d2)
   #pragma omp parallel
   #pragma omp single
   {
-    #pragma omp task shared (x) depend(*d2)
+    #pragma omp task shared (x) depend(depobj:*d2)
     x = 2;
-    #pragma omp task shared (x) depend(d1)
+    #pragma omp task shared (x) depend(depobj : d1)
     if (x != 2)
       abort ();
   }
@@ -34,9 +34,9 @@ dep2 (T &d2)
     #pragma omp depobj (d1) depend(out: x)
     #pragma omp depobj (*&d2) depend (in:x)
     #pragma omp depobj(d2)update(in)
-    #pragma omp task shared (x) depend(d1)
+    #pragma omp task shared (x) depend(depobj :d1)
     x = 2;
-    #pragma omp task shared (x) depend(d2)
+    #pragma omp task shared (x) depend(depobj: d2)
     if (x != 2)
       abort ();
     #pragma omp taskwait
@@ -57,9 +57,9 @@ dep3 (void)
     {
       #pragma omp depobj(d[0]) depend(out:x)
       #pragma omp depobj(d[1]) depend(in: x)
-      #pragma omp task shared (x) depend(*d)
+      #pragma omp task shared (x) depend(depobj:*d)
       x = 2;
-      #pragma omp task shared (x) depend(*(d + 1))
+      #pragma omp task shared (x) depend(depobj:*(d + 1))
       if (x != 2)
        abort ();
     }
@@ -79,10 +79,10 @@ antidep (void)
   #pragma omp parallel
   #pragma omp single
   {
-    #pragma omp task shared(xx) depend(dd2)
+    #pragma omp task shared(xx) depend(depobj:dd2)
     if (xx != 1)
       abort ();
-    #pragma omp task shared(xx) depend(dd1)
+    #pragma omp task shared(xx) depend(depobj:dd1)
     xx = 2;
   }
 }

        Jakub

Reply via email to