@@ -4925,8 +4944,18 @@ finish_omp_clauses (tree clauses)
remove = true;
}
else if (!processing_template_decl
+ && TREE_CODE (TREE_TYPE (t)) != REFERENCE_TYPE
&& !cxx_mark_addressable (t))
remove = true;
+ else if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_MAP)
+ break;
+ else if (bitmap_bit_p (&generic_head, DECL_UID (t)))
+ {
+ error ("%qD appears more than once in motion clauses", t);
+ remove = true;
+ }
+ else
+ bitmap_set_bit (&generic_head, DECL_UID (t));
break;
case OMP_CLAUSE_UNIFORM:
@@ -26330,13 +26332,19 @@ cp_parser_omp_var_list_no_open (cp_parse
if (!colon)
parser->colon_corrects_to_scope_p
= saved_colon_corrects_to_scope_p;
- /* Look for `:'. */
- if (!cp_parser_require (parser, CPP_COLON, RT_COLON))
- goto skip_comma;
- if (!cp_lexer_next_token_is (parser->lexer,
- CPP_CLOSE_SQUARE))
- length = cp_parser_expression (parser, /*cast_p=*/false,
- NULL);
+ if (cp_lexer_next_token_is (parser->lexer, CPP_CLOSE_SQUARE))
+ length = integer_one_node;
+ else
+ {
+ /* Look for `:'. */
+ if (!cp_parser_require (parser, CPP_COLON, RT_COLON))
+ goto skip_comma;
+ if (!cp_lexer_next_token_is (parser->lexer,
+ CPP_CLOSE_SQUARE))
+ length = cp_parser_expression (parser,
+ /*cast_p=*/false,
+ NULL);
+ }
/* Look for the closing `]'. */
if (!cp_parser_require (parser, CPP_CLOSE_SQUARE,
RT_CLOSE_SQUARE))
@@ -27409,15 +27447,11 @@ cp_parser_omp_all_clauses (cp_parser *pa
clauses = cp_parser_omp_var_list (parser, OMP_CLAUSE_TO,
clauses);
c_name = "to";
- if (!first)
- goto clause_not_first;
break;
case PRAGMA_OMP_CLAUSE_FROM:
clauses = cp_parser_omp_var_list (parser, OMP_CLAUSE_FROM,
clauses);
c_name = "from";
- if (!first)
- goto clause_not_first;
break;
case PRAGMA_OMP_CLAUSE_UNIFORM:
clauses = cp_parser_omp_var_list (parser, OMP_CLAUSE_UNIFORM,
@@ -29128,7 +29167,7 @@ cp_parser_omp_target_update (cp_parser *
&& find_omp_clause (clauses, OMP_CLAUSE_FROM) == NULL_TREE)
{
error_at (pragma_tok->location,
- "%<#pragma omp target update must contain either "
+ "%<#pragma omp target update must contain at least one "
"%<from%> or %<to%> clauses");
return false;
}