Hi! Does that look appropriate (for trunk)?
gcc/c/c-parser.c | 2 +- gcc/c/c-typeck.c | 2 ++ gcc/cp/parser.c | 2 +- gcc/cp/semantics.c | 2 ++ gcc/testsuite/c-c++-common/gomp/target-update-1.c | 41 +++++++++++++++++++++++ 5 files changed, 47 insertions(+), 2 deletions(-) diff --git gcc/c/c-parser.c gcc/c/c-parser.c index ae13b0a..d9c91f0 100644 --- gcc/c/c-parser.c +++ gcc/c/c-parser.c @@ -13530,7 +13530,7 @@ c_parser_omp_target_update (location_t loc, c_parser *parser, && find_omp_clause (clauses, OMP_CLAUSE_FROM) == NULL_TREE) { error_at (loc, - "%<#pragma omp target update must contain at least one " + "%<#pragma omp target update%> must contain at least one " "%<from%> or %<to%> clauses"); return false; } diff --git gcc/c/c-typeck.c gcc/c/c-typeck.c index b6db627..ab78f6d 100644 --- gcc/c/c-typeck.c +++ gcc/c/c-typeck.c @@ -12152,6 +12152,8 @@ c_finish_omp_clauses (tree clauses) remove = true; } } + /* Currently, we're not doing any further checking for array + sections. */ break; } if (t == error_mark_node) diff --git gcc/cp/parser.c gcc/cp/parser.c index e52edbb..6c88fe4 100644 --- gcc/cp/parser.c +++ gcc/cp/parser.c @@ -30288,7 +30288,7 @@ cp_parser_omp_target_update (cp_parser *parser, cp_token *pragma_tok, && find_omp_clause (clauses, OMP_CLAUSE_FROM) == NULL_TREE) { error_at (pragma_tok->location, - "%<#pragma omp target update must contain at least one " + "%<#pragma omp target update%> must contain at least one " "%<from%> or %<to%> clauses"); return false; } diff --git gcc/cp/semantics.c gcc/cp/semantics.c index 7f06f3f..5f29268 100644 --- gcc/cp/semantics.c +++ gcc/cp/semantics.c @@ -5648,6 +5648,8 @@ finish_omp_clauses (tree clauses) remove = true; } } + /* Currently, we're not doing any further checking for array + sections. */ break; } if (t == error_mark_node) diff --git gcc/testsuite/c-c++-common/gomp/target-update-1.c gcc/testsuite/c-c++-common/gomp/target-update-1.c new file mode 100644 index 0000000..8476314 --- /dev/null +++ gcc/testsuite/c-c++-common/gomp/target-update-1.c @@ -0,0 +1,41 @@ +void +f (int a[10], float b) +{ +#pragma omp target update from(a) +#pragma omp target update to(a) +#pragma omp target update from(b) +#pragma omp target update to(b) + +#pragma omp target update from(a, b) +#pragma omp target update from(a) to(b) +#pragma omp target update to(a, b) + +#pragma omp target update from(a, a, b) /* { dg-error "'a' appears more than once in motion clauses" } */ +#pragma omp target update to(a, a) to(b) /* { dg-error "'a' appears more than once in motion clauses" } */ +#pragma omp target update from(a) from(a, b) /* { dg-error "'a' appears more than once in motion clauses" } */ +#pragma omp target update from(a) to(a) from(b) /* { dg-error "'a' appears more than once in motion clauses" } */ +#pragma omp target update to(a) to(a) from(b) /* { dg-error "'a' appears more than once in motion clauses" } */ + +#pragma omp target update from(a, b, b) /* { dg-error "'b' appears more than once in motion clauses" } */ +#pragma omp target update to(a) to(b, b) /* { dg-error "'b' appears more than once in motion clauses" } */ +#pragma omp target update from(a, b) from(b) /* { dg-error "'b' appears more than once in motion clauses" } */ +#pragma omp target update from(a) to(b) from(b) /* { dg-error "'b' appears more than once in motion clauses" } */ +#pragma omp target update from(a) to(b) to(b) /* { dg-error "'b' appears more than once in motion clauses" } */ + +#pragma omp target update to(a) from(a[1:1]) /* { dg-error "'a' appears more than once in motion clauses" "not implemented" { xfail *-*-* } } */ +#pragma omp target update to(a[1:1]) from(a[1:1]) /* { dg-error "'a' appears more than once in motion clauses" "not implemented" { xfail *-*-* } } */ +#pragma omp target update to(a[1:1]) to(a[1:1]) /* { dg-error "'a' appears more than once in motion clauses" "not implemented" { xfail *-*-* } } */ +#pragma omp target update to(a[1:3]) from(a[2:1]) /* { dg-error "'a' appears more than once in motion clauses" "not implemented" { xfail *-*-* } } */ + +#pragma omp target update from(a) if(0) + +#pragma omp target update from(a) if(0) if(0) /* { dg-error "too many 'if' clauses" } */ + +#pragma omp target update from(a) device(0) + +#pragma omp target update from(a) device(0) device(0) /* { dg-error "too many 'device' clauses" } */ + +#pragma omp target update if(0) /* { dg-error "'#pragma omp target update' must contain at least one 'from' or 'to' clauses" } */ +#pragma omp target update device(0) /* { dg-error "'#pragma omp target update' must contain at least one 'from' or 'to' clauses" } */ +#pragma omp target update if(0) device(0) /* { dg-error "'#pragma omp target update' must contain at least one 'from' or 'to' clauses" } */ +} Grüße, Thomas
pgpciXcRq3XKt.pgp
Description: PGP signature