2018-08-01 Jakub Jelinek <jakub@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.
+
* tree.h (OMP_CLAUSE_REDUCTION_TASK, OMP_CLAUSE_REDUCTION_INSCAN):
Define.
* tree-pretty-print.c (dump_omp_clause): Print reduction modifiers.
2018-08-01 Jakub Jelinek <jakub@redhat.com>
+ * 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.
+
* c-omp.c (c_omp_split_clauses): Handle OMP_CLAUSE_REDUCTION_TASK.
2018-07-18 Jakub Jelinek <jakub@redhat.com>
"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:
}
}
else
- gcc_assert (kind != OMP_CLAUSE_DEPEND_UNSPECIFIED);
+ gcc_assert (kind != OMP_CLAUSE_DEPEND_SOURCE);
if (depobj == error_mark_node)
return;
2018-08-01 Jakub Jelinek <jakub@redhat.com>
+ * 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.
+
* c-parser.c (c_parser_omp_clause_reduction): Add IS_OMP argument,
parse reduction modifiers.
(c_parser_oacc_all_clauses, c_parser_omp_all_clauses): Adjust
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;
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)
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))
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)
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))
{
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 "
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");
{
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;
"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;
}
}
{
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)
2018-08-01 Jakub Jelinek <jakub@redhat.com>
+ * 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.
+
* parser.c (cp_parser_omp_clause_reduction): Add IS_OMP argument,
parse reduction modifiers.
(cp_parser_oacc_all_clauses, cp_parser_omp_all_clauses): Adjust
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))
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)
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))
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)
/*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))
{
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 "
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");
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,
}
else
finish_omp_depobj (EXPR_LOCATION (t), r,
- OMP_CLAUSE_DEPEND_UNSPECIFIED,
+ OMP_CLAUSE_DEPEND_SOURCE,
OMP_DEPOBJ_CLAUSES (t));
break;
{
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;
"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))
{
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;
}
}
{
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)
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:
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:
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:
if (i != 1)
continue;
break;
- case OMP_CLAUSE_DEPEND_UNSPECIFIED:
+ case OMP_CLAUSE_DEPEND_DEPOBJ:
if (i != 3)
continue;
break;
2018-08-01 Jakub Jelinek <jakub@redhat.com>
+ * 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.
+
* c-c++-common/gomp/reduction-task-1.c: New test.
* c-c++-common/gomp/reduction-task-2.c: New test.
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], \
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 *)), \
{
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], \
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 *)), \
#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++;
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
}
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" } */
;
}
{
#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
#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" } */
#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" } */
;
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" } */
;
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
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], \
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 *)), \
{
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], \
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 *)), \
#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++;
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" }
;
}
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'" }
}
}
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" }
;
}
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" }
;
}
{
#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
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++)
{
#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" }
#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" }
;
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" }
;
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
};
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";
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);
}
+2018-08-01 Jakub Jelinek <jakub@redhat.com>
+
+ * 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.
+
2018-07-27 Jakub Jelinek <jakub@redhat.com>
* libgomp.map (OMP_5.0): Export omp_pause_resource{,_all}{,_}.
{
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)
{
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)
#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 ();
}
#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
{
#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 ();
}
#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;
}
}
{
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)
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++;
}
#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 ();
}
#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
{
#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 ();
}
#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;
}
}