Commit 0d077441 by Nathan Sidwell

parser.c (cp_parser_omp_clause_name): Add auto, gang, seq, vector, worker.

	gcc/cp/
	* parser.c (cp_parser_omp_clause_name): Add auto, gang, seq,
	vector, worker.
	(cp_parser_oacc_simple_clause): New.
	(cp_parser_oacc_shape_clause): New.
	(cp_parser_oacc_all_clauses): Add auto, gang, seq, vector, worker.
	(OACC_LOOP_CLAUSE_MASK): Likewise.
	* semantics.c (finish_omp_clauses): Add auto, gang, seq, vector,
	worker. Unify the handling of teams, tasks and vector_length with
	the other loop shape clauses.

	gcc/testsuite/
	* g++.dg/g++.dg/gomp/pr33372-1.C: Adjust diagnostic.
	* gcc/testsuite/g++.dg/gomp/pr33372-3.C: Likewise.

From-SVN: r229460
parent 8ab78162
2015-10-27 Cesar Philippidis <cesar@codesourcery.com>
Thomas Schwinge <thomas@codesourcery.com>
James Norris <jnorris@codesourcery.com>
Joseph Myers <joseph@codesourcery.com>
Julian Brown <julian@codesourcery.com>
Nathan Sidwell <nathan@codesourcery.com>
Bernd Schmidt <bschmidt@redhat.com>
* parser.c (cp_parser_omp_clause_name): Add auto, gang, seq,
vector, worker.
(cp_parser_oacc_simple_clause): New.
(cp_parser_oacc_shape_clause): New.
(cp_parser_oacc_all_clauses): Add auto, gang, seq, vector, worker.
(OACC_LOOP_CLAUSE_MASK): Likewise.
* semantics.c (finish_omp_clauses): Add auto, gang, seq, vector,
worker. Unify the handling of teams, tasks and vector_length with
the other loop shape clauses.
2015-10-27 Thomas Schwinge <thomas@codesourcery.com> 2015-10-27 Thomas Schwinge <thomas@codesourcery.com>
James Norris <jnorris@codesourcery.com> James Norris <jnorris@codesourcery.com>
Cesar Philippidis <cesar@codesourcery.com> Cesar Philippidis <cesar@codesourcery.com>
......
...@@ -29064,7 +29064,9 @@ cp_parser_omp_clause_name (cp_parser *parser) ...@@ -29064,7 +29064,9 @@ cp_parser_omp_clause_name (cp_parser *parser)
{ {
pragma_omp_clause result = PRAGMA_OMP_CLAUSE_NONE; pragma_omp_clause result = PRAGMA_OMP_CLAUSE_NONE;
if (cp_lexer_next_token_is_keyword (parser->lexer, RID_IF)) if (cp_lexer_next_token_is_keyword (parser->lexer, RID_AUTO))
result = PRAGMA_OACC_CLAUSE_AUTO;
else if (cp_lexer_next_token_is_keyword (parser->lexer, RID_IF))
result = PRAGMA_OMP_CLAUSE_IF; result = PRAGMA_OMP_CLAUSE_IF;
else if (cp_lexer_next_token_is_keyword (parser->lexer, RID_DEFAULT)) else if (cp_lexer_next_token_is_keyword (parser->lexer, RID_DEFAULT))
result = PRAGMA_OMP_CLAUSE_DEFAULT; result = PRAGMA_OMP_CLAUSE_DEFAULT;
...@@ -29122,7 +29124,9 @@ cp_parser_omp_clause_name (cp_parser *parser) ...@@ -29122,7 +29124,9 @@ cp_parser_omp_clause_name (cp_parser *parser)
result = PRAGMA_OMP_CLAUSE_FROM; result = PRAGMA_OMP_CLAUSE_FROM;
break; break;
case 'g': case 'g':
if (!strcmp ("grainsize", p)) if (!strcmp ("gang", p))
result = PRAGMA_OACC_CLAUSE_GANG;
else if (!strcmp ("grainsize", p))
result = PRAGMA_OMP_CLAUSE_GRAINSIZE; result = PRAGMA_OMP_CLAUSE_GRAINSIZE;
break; break;
case 'h': case 'h':
...@@ -29212,6 +29216,8 @@ cp_parser_omp_clause_name (cp_parser *parser) ...@@ -29212,6 +29216,8 @@ cp_parser_omp_clause_name (cp_parser *parser)
result = PRAGMA_OMP_CLAUSE_SECTIONS; result = PRAGMA_OMP_CLAUSE_SECTIONS;
else if (!strcmp ("self", p)) else if (!strcmp ("self", p))
result = PRAGMA_OACC_CLAUSE_SELF; result = PRAGMA_OACC_CLAUSE_SELF;
else if (!strcmp ("seq", p))
result = PRAGMA_OACC_CLAUSE_SEQ;
else if (!strcmp ("shared", p)) else if (!strcmp ("shared", p))
result = PRAGMA_OMP_CLAUSE_SHARED; result = PRAGMA_OMP_CLAUSE_SHARED;
else if (!strcmp ("simd", p)) else if (!strcmp ("simd", p))
...@@ -29238,7 +29244,9 @@ cp_parser_omp_clause_name (cp_parser *parser) ...@@ -29238,7 +29244,9 @@ cp_parser_omp_clause_name (cp_parser *parser)
result = PRAGMA_OMP_CLAUSE_USE_DEVICE_PTR; result = PRAGMA_OMP_CLAUSE_USE_DEVICE_PTR;
break; break;
case 'v': case 'v':
if (!strcmp ("vector_length", p)) if (!strcmp ("vector", p))
result = PRAGMA_OACC_CLAUSE_VECTOR;
else if (!strcmp ("vector_length", p))
result = PRAGMA_OACC_CLAUSE_VECTOR_LENGTH; result = PRAGMA_OACC_CLAUSE_VECTOR_LENGTH;
else if (flag_cilkplus && !strcmp ("vectorlength", p)) else if (flag_cilkplus && !strcmp ("vectorlength", p))
result = PRAGMA_CILK_CLAUSE_VECTORLENGTH; result = PRAGMA_CILK_CLAUSE_VECTORLENGTH;
...@@ -29246,6 +29254,8 @@ cp_parser_omp_clause_name (cp_parser *parser) ...@@ -29246,6 +29254,8 @@ cp_parser_omp_clause_name (cp_parser *parser)
case 'w': case 'w':
if (!strcmp ("wait", p)) if (!strcmp ("wait", p))
result = PRAGMA_OACC_CLAUSE_WAIT; result = PRAGMA_OACC_CLAUSE_WAIT;
else if (!strcmp ("worker", p))
result = PRAGMA_OACC_CLAUSE_WORKER;
break; break;
} }
} }
...@@ -29582,6 +29592,146 @@ cp_parser_oacc_data_clause_deviceptr (cp_parser *parser, tree list) ...@@ -29582,6 +29592,146 @@ cp_parser_oacc_data_clause_deviceptr (cp_parser *parser, tree list)
return list; return list;
} }
/* OpenACC 2.0:
auto
independent
nohost
seq */
static tree
cp_parser_oacc_simple_clause (cp_parser * /* parser */,
enum omp_clause_code code,
tree list, location_t location)
{
check_no_duplicate_clause (list, code, omp_clause_code_name[code], location);
tree c = build_omp_clause (location, code);
OMP_CLAUSE_CHAIN (c) = list;
return c;
}
/* OpenACC:
gang [( gang-arg-list )]
worker [( [num:] int-expr )]
vector [( [length:] int-expr )]
where gang-arg is one of:
[num:] int-expr
static: size-expr
and size-expr may be:
*
int-expr
*/
static tree
cp_parser_oacc_shape_clause (cp_parser *parser, omp_clause_code kind,
const char *str, tree list)
{
const char *id = "num";
cp_lexer *lexer = parser->lexer;
tree ops[2] = { NULL_TREE, NULL_TREE }, c;
location_t loc = cp_lexer_peek_token (lexer)->location;
if (kind == OMP_CLAUSE_VECTOR)
id = "length";
if (cp_lexer_next_token_is (lexer, CPP_OPEN_PAREN))
{
cp_lexer_consume_token (lexer);
do
{
cp_token *next = cp_lexer_peek_token (lexer);
int idx = 0;
/* Gang static argument. */
if (kind == OMP_CLAUSE_GANG
&& cp_lexer_next_token_is_keyword (lexer, RID_STATIC))
{
cp_lexer_consume_token (lexer);
if (!cp_parser_require (parser, CPP_COLON, RT_COLON))
goto cleanup_error;
idx = 1;
if (ops[idx] != NULL)
{
cp_parser_error (parser, "too many %<static%> arguments");
goto cleanup_error;
}
/* Check for the '*' argument. */
if (cp_lexer_next_token_is (lexer, CPP_MULT))
{
cp_lexer_consume_token (lexer);
ops[idx] = integer_minus_one_node;
if (cp_lexer_next_token_is (lexer, CPP_COMMA))
{
cp_lexer_consume_token (lexer);
continue;
}
else break;
}
}
/* Worker num: argument and vector length: arguments. */
else if (cp_lexer_next_token_is (lexer, CPP_NAME)
&& strcmp (id, IDENTIFIER_POINTER (next->u.value)) == 0
&& cp_lexer_nth_token_is (lexer, 2, CPP_COLON))
{
cp_lexer_consume_token (lexer); /* id */
cp_lexer_consume_token (lexer); /* ':' */
}
/* Now collect the actual argument. */
if (ops[idx] != NULL_TREE)
{
cp_parser_error (parser, "unexpected argument");
goto cleanup_error;
}
tree expr = cp_parser_assignment_expression (parser, NULL, false,
false);
if (expr == error_mark_node)
goto cleanup_error;
mark_exp_read (expr);
ops[idx] = expr;
if (kind == OMP_CLAUSE_GANG
&& cp_lexer_next_token_is (lexer, CPP_COMMA))
{
cp_lexer_consume_token (lexer);
continue;
}
break;
}
while (1);
if (!cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN))
goto cleanup_error;
}
check_no_duplicate_clause (list, kind, str, loc);
c = build_omp_clause (loc, kind);
if (ops[1])
OMP_CLAUSE_OPERAND (c, 1) = ops[1];
OMP_CLAUSE_OPERAND (c, 0) = ops[0];
OMP_CLAUSE_CHAIN (c) = list;
return c;
cleanup_error:
cp_parser_skip_to_closing_parenthesis (parser, false, false, true);
return list;
}
/* OpenACC: /* OpenACC:
vector_length ( expression ) */ vector_length ( expression ) */
...@@ -31306,6 +31456,11 @@ cp_parser_oacc_all_clauses (cp_parser *parser, omp_clause_mask mask, ...@@ -31306,6 +31456,11 @@ cp_parser_oacc_all_clauses (cp_parser *parser, omp_clause_mask mask,
clauses = cp_parser_oacc_clause_async (parser, clauses); clauses = cp_parser_oacc_clause_async (parser, clauses);
c_name = "async"; c_name = "async";
break; break;
case PRAGMA_OACC_CLAUSE_AUTO:
clauses = cp_parser_oacc_simple_clause (parser, OMP_CLAUSE_AUTO,
clauses, here);
c_name = "auto";
break;
case PRAGMA_OACC_CLAUSE_COLLAPSE: case PRAGMA_OACC_CLAUSE_COLLAPSE:
clauses = cp_parser_omp_clause_collapse (parser, clauses, here); clauses = cp_parser_omp_clause_collapse (parser, clauses, here);
c_name = "collapse"; c_name = "collapse";
...@@ -31338,6 +31493,11 @@ cp_parser_oacc_all_clauses (cp_parser *parser, omp_clause_mask mask, ...@@ -31338,6 +31493,11 @@ cp_parser_oacc_all_clauses (cp_parser *parser, omp_clause_mask mask,
clauses = cp_parser_oacc_data_clause_deviceptr (parser, clauses); clauses = cp_parser_oacc_data_clause_deviceptr (parser, clauses);
c_name = "deviceptr"; c_name = "deviceptr";
break; break;
case PRAGMA_OACC_CLAUSE_GANG:
c_name = "gang";
clauses = cp_parser_oacc_shape_clause (parser, OMP_CLAUSE_GANG,
c_name, clauses);
break;
case PRAGMA_OACC_CLAUSE_HOST: case PRAGMA_OACC_CLAUSE_HOST:
clauses = cp_parser_oacc_data_clause (parser, c_kind, clauses); clauses = cp_parser_oacc_data_clause (parser, c_kind, clauses);
c_name = "host"; c_name = "host";
...@@ -31382,6 +31542,16 @@ cp_parser_oacc_all_clauses (cp_parser *parser, omp_clause_mask mask, ...@@ -31382,6 +31542,16 @@ cp_parser_oacc_all_clauses (cp_parser *parser, omp_clause_mask mask,
clauses = cp_parser_oacc_data_clause (parser, c_kind, clauses); clauses = cp_parser_oacc_data_clause (parser, c_kind, clauses);
c_name = "self"; c_name = "self";
break; break;
case PRAGMA_OACC_CLAUSE_SEQ:
clauses = cp_parser_oacc_simple_clause (parser, OMP_CLAUSE_SEQ,
clauses, here);
c_name = "seq";
break;
case PRAGMA_OACC_CLAUSE_VECTOR:
c_name = "vector";
clauses = cp_parser_oacc_shape_clause (parser, OMP_CLAUSE_VECTOR,
c_name, clauses);
break;
case PRAGMA_OACC_CLAUSE_VECTOR_LENGTH: case PRAGMA_OACC_CLAUSE_VECTOR_LENGTH:
clauses = cp_parser_oacc_clause_vector_length (parser, clauses); clauses = cp_parser_oacc_clause_vector_length (parser, clauses);
c_name = "vector_length"; c_name = "vector_length";
...@@ -31390,6 +31560,11 @@ cp_parser_oacc_all_clauses (cp_parser *parser, omp_clause_mask mask, ...@@ -31390,6 +31560,11 @@ cp_parser_oacc_all_clauses (cp_parser *parser, omp_clause_mask mask,
clauses = cp_parser_oacc_clause_wait (parser, clauses); clauses = cp_parser_oacc_clause_wait (parser, clauses);
c_name = "wait"; c_name = "wait";
break; break;
case PRAGMA_OACC_CLAUSE_WORKER:
c_name = "worker";
clauses = cp_parser_oacc_shape_clause (parser, OMP_CLAUSE_WORKER,
c_name, clauses);
break;
default: default:
cp_parser_error (parser, "expected %<#pragma acc%> clause"); cp_parser_error (parser, "expected %<#pragma acc%> clause");
goto saw_error; goto saw_error;
...@@ -34303,6 +34478,11 @@ cp_parser_oacc_enter_exit_data (cp_parser *parser, cp_token *pragma_tok, ...@@ -34303,6 +34478,11 @@ cp_parser_oacc_enter_exit_data (cp_parser *parser, cp_token *pragma_tok,
#define OACC_LOOP_CLAUSE_MASK \ #define OACC_LOOP_CLAUSE_MASK \
( (OMP_CLAUSE_MASK_1 << PRAGMA_OACC_CLAUSE_COLLAPSE) \ ( (OMP_CLAUSE_MASK_1 << PRAGMA_OACC_CLAUSE_COLLAPSE) \
| (OMP_CLAUSE_MASK_1 << PRAGMA_OACC_CLAUSE_GANG) \
| (OMP_CLAUSE_MASK_1 << PRAGMA_OACC_CLAUSE_VECTOR) \
| (OMP_CLAUSE_MASK_1 << PRAGMA_OACC_CLAUSE_WORKER) \
| (OMP_CLAUSE_MASK_1 << PRAGMA_OACC_CLAUSE_AUTO) \
| (OMP_CLAUSE_MASK_1 << PRAGMA_OACC_CLAUSE_SEQ) \
| (OMP_CLAUSE_MASK_1 << PRAGMA_OACC_CLAUSE_REDUCTION) ) | (OMP_CLAUSE_MASK_1 << PRAGMA_OACC_CLAUSE_REDUCTION) )
static tree static tree
...@@ -5965,14 +5965,76 @@ finish_omp_clauses (tree clauses, bool allow_fields, bool declare_simd) ...@@ -5965,14 +5965,76 @@ finish_omp_clauses (tree clauses, bool allow_fields, bool declare_simd)
OMP_CLAUSE_FINAL_EXPR (c) = t; OMP_CLAUSE_FINAL_EXPR (c) = t;
break; break;
case OMP_CLAUSE_GANG:
/* Operand 1 is the gang static: argument. */
t = OMP_CLAUSE_OPERAND (c, 1);
if (t != NULL_TREE)
{
if (t == error_mark_node)
remove = true;
else if (!type_dependent_expression_p (t)
&& !INTEGRAL_TYPE_P (TREE_TYPE (t)))
{
error ("%<gang%> static expression must be integral");
remove = true;
}
else
{
t = mark_rvalue_use (t);
if (!processing_template_decl)
{
t = maybe_constant_value (t);
if (TREE_CODE (t) == INTEGER_CST
&& tree_int_cst_sgn (t) != 1
&& t != integer_minus_one_node)
{
warning_at (OMP_CLAUSE_LOCATION (c), 0,
"%<gang%> static value must be"
"positive");
t = integer_one_node;
}
}
t = fold_build_cleanup_point_expr (TREE_TYPE (t), t);
}
OMP_CLAUSE_OPERAND (c, 1) = t;
}
/* Check operand 0, the num argument. */
case OMP_CLAUSE_WORKER:
case OMP_CLAUSE_VECTOR:
if (OMP_CLAUSE_OPERAND (c, 0) == NULL_TREE)
break;
case OMP_CLAUSE_NUM_TASKS:
case OMP_CLAUSE_NUM_TEAMS:
case OMP_CLAUSE_NUM_THREADS: case OMP_CLAUSE_NUM_THREADS:
t = OMP_CLAUSE_NUM_THREADS_EXPR (c); case OMP_CLAUSE_NUM_GANGS:
case OMP_CLAUSE_NUM_WORKERS:
case OMP_CLAUSE_VECTOR_LENGTH:
t = OMP_CLAUSE_OPERAND (c, 0);
if (t == error_mark_node) if (t == error_mark_node)
remove = true; remove = true;
else if (!type_dependent_expression_p (t) else if (!type_dependent_expression_p (t)
&& !INTEGRAL_TYPE_P (TREE_TYPE (t))) && !INTEGRAL_TYPE_P (TREE_TYPE (t)))
{ {
error ("num_threads expression must be integral"); switch (OMP_CLAUSE_CODE (c))
{
case OMP_CLAUSE_GANG:
error_at (OMP_CLAUSE_LOCATION (c),
"%<gang%> num expression must be integral"); break;
case OMP_CLAUSE_VECTOR:
error_at (OMP_CLAUSE_LOCATION (c),
"%<vector%> length expression must be integral");
break;
case OMP_CLAUSE_WORKER:
error_at (OMP_CLAUSE_LOCATION (c),
"%<worker%> num expression must be integral");
break;
default:
error_at (OMP_CLAUSE_LOCATION (c),
"%qs expression must be integral",
omp_clause_code_name[OMP_CLAUSE_CODE (c)]);
}
remove = true; remove = true;
} }
else else
...@@ -5984,13 +6046,33 @@ finish_omp_clauses (tree clauses, bool allow_fields, bool declare_simd) ...@@ -5984,13 +6046,33 @@ finish_omp_clauses (tree clauses, bool allow_fields, bool declare_simd)
if (TREE_CODE (t) == INTEGER_CST if (TREE_CODE (t) == INTEGER_CST
&& tree_int_cst_sgn (t) != 1) && tree_int_cst_sgn (t) != 1)
{ {
warning_at (OMP_CLAUSE_LOCATION (c), 0, switch (OMP_CLAUSE_CODE (c))
"%<num_threads%> value must be positive"); {
case OMP_CLAUSE_GANG:
warning_at (OMP_CLAUSE_LOCATION (c), 0,
"%<gang%> num value must be positive");
break;
case OMP_CLAUSE_VECTOR:
warning_at (OMP_CLAUSE_LOCATION (c), 0,
"%<vector%> length value must be"
"positive");
break;
case OMP_CLAUSE_WORKER:
warning_at (OMP_CLAUSE_LOCATION (c), 0,
"%<worker%> num value must be"
"positive");
break;
default:
warning_at (OMP_CLAUSE_LOCATION (c), 0,
"%qs value must be positive",
omp_clause_code_name
[OMP_CLAUSE_CODE (c)]);
}
t = integer_one_node; t = integer_one_node;
} }
t = fold_build_cleanup_point_expr (TREE_TYPE (t), t); t = fold_build_cleanup_point_expr (TREE_TYPE (t), t);
} }
OMP_CLAUSE_NUM_THREADS_EXPR (c) = t; OMP_CLAUSE_OPERAND (c, 0) = t;
} }
break; break;
...@@ -6062,35 +6144,6 @@ finish_omp_clauses (tree clauses, bool allow_fields, bool declare_simd) ...@@ -6062,35 +6144,6 @@ finish_omp_clauses (tree clauses, bool allow_fields, bool declare_simd)
} }
break; break;
case OMP_CLAUSE_NUM_TEAMS:
t = OMP_CLAUSE_NUM_TEAMS_EXPR (c);
if (t == error_mark_node)
remove = true;
else if (!type_dependent_expression_p (t)
&& !INTEGRAL_TYPE_P (TREE_TYPE (t)))
{
error ("%<num_teams%> expression must be integral");
remove = true;
}
else
{
t = mark_rvalue_use (t);
if (!processing_template_decl)
{
t = maybe_constant_value (t);
if (TREE_CODE (t) == INTEGER_CST
&& tree_int_cst_sgn (t) != 1)
{
warning_at (OMP_CLAUSE_LOCATION (c), 0,
"%<num_teams%> value must be positive");
t = integer_one_node;
}
t = fold_build_cleanup_point_expr (TREE_TYPE (t), t);
}
OMP_CLAUSE_NUM_TEAMS_EXPR (c) = t;
}
break;
case OMP_CLAUSE_ASYNC: case OMP_CLAUSE_ASYNC:
t = OMP_CLAUSE_ASYNC_EXPR (c); t = OMP_CLAUSE_ASYNC_EXPR (c);
if (t == error_mark_node) if (t == error_mark_node)
...@@ -6110,16 +6163,6 @@ finish_omp_clauses (tree clauses, bool allow_fields, bool declare_simd) ...@@ -6110,16 +6163,6 @@ finish_omp_clauses (tree clauses, bool allow_fields, bool declare_simd)
} }
break; break;
case OMP_CLAUSE_VECTOR_LENGTH:
t = OMP_CLAUSE_VECTOR_LENGTH_EXPR (c);
t = maybe_convert_cond (t);
if (t == error_mark_node)
remove = true;
else if (!processing_template_decl)
t = fold_build_cleanup_point_expr (TREE_TYPE (t), t);
OMP_CLAUSE_VECTOR_LENGTH_EXPR (c) = t;
break;
case OMP_CLAUSE_WAIT: case OMP_CLAUSE_WAIT:
t = OMP_CLAUSE_WAIT_EXPR (c); t = OMP_CLAUSE_WAIT_EXPR (c);
if (t == error_mark_node) if (t == error_mark_node)
...@@ -6547,35 +6590,6 @@ finish_omp_clauses (tree clauses, bool allow_fields, bool declare_simd) ...@@ -6547,35 +6590,6 @@ finish_omp_clauses (tree clauses, bool allow_fields, bool declare_simd)
} }
goto check_dup_generic; goto check_dup_generic;
case OMP_CLAUSE_NUM_TASKS:
t = OMP_CLAUSE_NUM_TASKS_EXPR (c);
if (t == error_mark_node)
remove = true;
else if (!type_dependent_expression_p (t)
&& !INTEGRAL_TYPE_P (TREE_TYPE (t)))
{
error ("%<num_tasks%> expression must be integral");
remove = true;
}
else
{
t = mark_rvalue_use (t);
if (!processing_template_decl)
{
t = maybe_constant_value (t);
if (TREE_CODE (t) == INTEGER_CST
&& tree_int_cst_sgn (t) != 1)
{
warning_at (OMP_CLAUSE_LOCATION (c), 0,
"%<num_tasks%> value must be positive");
t = integer_one_node;
}
t = fold_build_cleanup_point_expr (TREE_TYPE (t), t);
}
OMP_CLAUSE_NUM_TASKS_EXPR (c) = t;
}
break;
case OMP_CLAUSE_GRAINSIZE: case OMP_CLAUSE_GRAINSIZE:
t = OMP_CLAUSE_GRAINSIZE_EXPR (c); t = OMP_CLAUSE_GRAINSIZE_EXPR (c);
if (t == error_mark_node) if (t == error_mark_node)
...@@ -6694,6 +6708,8 @@ finish_omp_clauses (tree clauses, bool allow_fields, bool declare_simd) ...@@ -6694,6 +6708,8 @@ finish_omp_clauses (tree clauses, bool allow_fields, bool declare_simd)
case OMP_CLAUSE_SIMD: case OMP_CLAUSE_SIMD:
case OMP_CLAUSE_DEFAULTMAP: case OMP_CLAUSE_DEFAULTMAP:
case OMP_CLAUSE__CILK_FOR_COUNT_: case OMP_CLAUSE__CILK_FOR_COUNT_:
case OMP_CLAUSE_AUTO:
case OMP_CLAUSE_SEQ:
break; break;
case OMP_CLAUSE_INBRANCH: case OMP_CLAUSE_INBRANCH:
......
2015-10-27 Nathan Sidwell <nathan@codesourcery.com>
Cesar Philippidis <cesar@codesourcery.com>
* g++.dg/g++.dg/gomp/pr33372-1.C: Adjust diagnostic.
* gcc/testsuite/g++.dg/gomp/pr33372-3.C: Likewise.
2015-10-27 Richard Henderson <rth@redhat.com> 2015-10-27 Richard Henderson <rth@redhat.com>
PR rtl-opt/67609 PR rtl-opt/67609
...@@ -24,7 +30,7 @@ ...@@ -24,7 +30,7 @@
* gfortran.dg/goacc/cray.f95: Likewise. * gfortran.dg/goacc/cray.f95: Likewise.
* gfortran.dg/goacc/parameter.f95: Likewise. * gfortran.dg/goacc/parameter.f95: Likewise.
2015-10-27 Steven G. Kargl <kargl@gcc.gnu.org> 2015-10-27 Steven G. Kargl <kargl@gcc.gnu.org>
PR fortran/68108 PR fortran/68108
* gfortran.dg/pr67805_2.f90: New test. * gfortran.dg/pr67805_2.f90: New test.
......
...@@ -6,7 +6,7 @@ template <typename T> ...@@ -6,7 +6,7 @@ template <typename T>
void f () void f ()
{ {
extern T n (); extern T n ();
#pragma omp parallel num_threads(n) // { dg-error "num_threads expression must be integral" } #pragma omp parallel num_threads(n) // { dg-error "'num_threads' expression must be integral" }
; ;
#pragma omp parallel for schedule(static, n) #pragma omp parallel for schedule(static, n)
for (int i = 0; i < 10; i++) // { dg-error "chunk size expression must be integral" } for (int i = 0; i < 10; i++) // { dg-error "chunk size expression must be integral" }
......
...@@ -6,7 +6,7 @@ template <typename T> ...@@ -6,7 +6,7 @@ template <typename T>
void f () void f ()
{ {
T n = 6; T n = 6;
#pragma omp parallel num_threads(n) // { dg-error "num_threads expression must be integral" } #pragma omp parallel num_threads(n) // { dg-error "'num_threads' expression must be integral" }
; ;
#pragma omp parallel for schedule(static, n) #pragma omp parallel for schedule(static, n)
for (int i = 0; i < 10; i++) // { dg-error "chunk size expression must be integral" } for (int i = 0; i < 10; i++) // { dg-error "chunk size expression must be integral" }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment