diff options
author | Ilmir Usmanov <i.usmanov@samsung.com> | 2013-12-11 17:47:52 +0000 |
---|---|---|
committer | Ilmir Usmanov <i.usmanov@samsung.com> | 2013-12-11 17:47:52 +0000 |
commit | 47c2bcf85ab41c197bdfc9538a3e4abb0634ceae (patch) | |
tree | 3cd5731cc660e62e90def2fb3189e9be7c51185d | |
parent | c4b74ab4891ac8171915e2def1c44883e1a74377 (diff) |
11-12-2013 Ilmir Usmanov <i.usmanov@samsung.com>
Fix data clauses and seq/independent pair in C FE
* gcc/c/c-parser.c
(c_parser_acc_check_multiple_clauses): New function
(c_parser_acc_variable_list): Check for presence of
variable in multiple clauses and type checks
(c_parser_acc_clause_seq, c_parser_acc_clause_independent):
Check for presence of both seq and independent in single directive
* gcc/testsuite/gcc.dg/gacc/branch.c: Fix test
* gcc/testsuite/gcc.dg/gacc/data-clauses.c: Likewise
* gcc/testsuite/gcc.dg/gacc/if.c: Likewise
* gcc/testsuite/gcc.dg/gacc/loop.c: Likewise
git-svn-id: https://gcc.gnu.org/svn/gcc/branches/openacc-1_0-branch@205901 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r-- | ChangeLog.ACC | 14 | ||||
-rw-r--r-- | gcc/c/c-parser.c | 57 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/gacc/branch.c | 64 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/gacc/data-clauses.c | 215 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/gacc/if.c | 39 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/gacc/loop.c | 7 |
6 files changed, 206 insertions, 190 deletions
diff --git a/ChangeLog.ACC b/ChangeLog.ACC index 326b720fac5..fcc450e9a3b 100644 --- a/ChangeLog.ACC +++ b/ChangeLog.ACC @@ -1,3 +1,17 @@ +11-12-2013 Ilmir Usmanov <i.usmanov@samsung.com> + Fix data clauses and seq/independent pair in C FE + + * gcc/c/c-parser.c + (c_parser_acc_check_multiple_clauses): New function + (c_parser_acc_variable_list): Check for presence of + variable in multiple clauses and type checks + (c_parser_acc_clause_seq, c_parser_acc_clause_independent): + Check for presence of both seq and independent in single directive + * gcc/testsuite/gcc.dg/gacc/branch.c: Fix test + * gcc/testsuite/gcc.dg/gacc/data-clauses.c: Likewise + * gcc/testsuite/gcc.dg/gacc/if.c: Likewise + * gcc/testsuite/gcc.dg/gacc/loop.c: Likewise + 11-12-2013 Dmitry Bocharnikov <dmitry.b@samsung.com> Fix copyout. diff --git a/gcc/c/c-parser.c b/gcc/c/c-parser.c index 641ded08f98..33a84b02b0f 100644 --- a/gcc/c/c-parser.c +++ b/gcc/c/c-parser.c @@ -11058,6 +11058,20 @@ c_parser_acc_clause_check_no_duplicate(tree clauses, } } +static void +c_parser_acc_check_multiple_clauses (tree clauses, tree var) +{ + tree c; + + for (c = clauses; c; c = ACC_CLAUSE_CHAIN(c)) + if (ACC_CLAUSE_DECL(c) == var) + { + location_t loc = ACC_CLAUSE_LOCATION(c); + warning_at (loc, 0, "%qE appears in multiple clauses", var); + break; + } +} + /* OpenACC 1.0: variable-list: identifier @@ -11086,6 +11100,7 @@ c_parser_acc_variable_list (c_parser *parser, } else if (kind != 0) { + c_parser_acc_check_multiple_clauses(list, t_name); tree new_clause = build_acc_clause (clause_loc, kind); ACC_CLAUSE_DECL (new_clause) = t_name; ACC_CLAUSE_CHAIN (new_clause) = list; @@ -11099,6 +11114,33 @@ c_parser_acc_variable_list (c_parser *parser, c_parser_consume_token (parser); + /* Check types. */ + switch (kind) + { + case ACC_CLAUSE_DEVICEPTR: + if (!POINTER_TYPE_P (TREE_TYPE (t_name))) + error_at (clause_loc, + "%qE must be pointer for %<deviceptr%>", t_name); + break; + + case ACC_CLAUSE_COPY: + case ACC_CLAUSE_COPYIN: + case ACC_CLAUSE_COPYOUT: + case ACC_CLAUSE_CREATE: + case ACC_CLAUSE_PRESENT: + case ACC_CLAUSE_PRESENT_OR_COPY: + case ACC_CLAUSE_PRESENT_OR_COPYIN: + case ACC_CLAUSE_PRESENT_OR_COPYOUT: + case ACC_CLAUSE_PRESENT_OR_CREATE: + case ACC_CLAUSE_REDUCTION: + case ACC_CLAUSE_PRIVATE: + case ACC_CLAUSE_FIRSTPRIVATE: + break; + + default: + gcc_unreachable(); + } + if (c_parser_next_token_is_not (parser, CPP_COMMA)) { break; @@ -11209,6 +11251,14 @@ c_parser_acc_clause_seq (c_parser *parser, tree list) c_parser_acc_clause_check_no_duplicate (list, ACC_CLAUSE_SEQ, "seq"); + for (c = list; c; c = ACC_CLAUSE_CHAIN(c)) { + if (ACC_CLAUSE_CODE(c) == ACC_CLAUSE_INDEPENDENT) { + location_t loc = ACC_CLAUSE_LOCATION(c); + error_at (loc, "both %<seq%> and %<independent are not allowed%>"); + break; + } + } + c = build_acc_clause (c_parser_peek_token (parser)->location, ACC_CLAUSE_SEQ); ACC_CLAUSE_CHAIN (c) = list; @@ -11225,6 +11275,13 @@ c_parser_acc_clause_independent (c_parser *parser, tree list) c_parser_acc_clause_check_no_duplicate (list, ACC_CLAUSE_INDEPENDENT, "independent"); + for (c = list; c; c = ACC_CLAUSE_CHAIN(c)) { + if (ACC_CLAUSE_CODE(c) == ACC_CLAUSE_SEQ) { + location_t loc = ACC_CLAUSE_LOCATION(c); + error_at (loc, "both %<seq%> and %<independent are not allowed%>"); + break; + } + } c = build_acc_clause (c_parser_peek_token (parser)->location, ACC_CLAUSE_INDEPENDENT); diff --git a/gcc/testsuite/gcc.dg/gacc/branch.c b/gcc/testsuite/gcc.dg/gacc/branch.c index 53e5cb2f638..e1f6c4f99a3 100644 --- a/gcc/testsuite/gcc.dg/gacc/branch.c +++ b/gcc/testsuite/gcc.dg/gacc/branch.c @@ -1,58 +1,26 @@ /* { dg-do compile } */ /* { dg-options "-fopenacc" } */ -int main() { - int i; +int +main() +{ + int i; - if (1) { #pragma acc parallel - } /* { dg-error "Unexpected" } */ - #pragma acc end parallel - } - - if (1) { - #pragma acc kernels - } /* { dg-error "Unexpected" } */ - #pragma acc end kernels - } - - #pragma acc parallel - if (1) { - #pragma acc end parallel /* { dg-error "Unexpected" } */ - } - #pragma acc end parallel - - #pragma acc kernels - if (1) { - #pragma acc end kernels /* { dg-error "Unexpected" } */ - } - #pragma acc end kernels - - #pragma acc parallel - if (1) { - } - #pragma acc end parallel - - #pragma acc kernels - if (1) { - } - #pragma acc end kernels - - if (1) { - #pragma acc parallel - #pragma acc end parallel - } - - if (1) { - #pragma acc kernels - #pragma acc end kernels - } + { + /* TODO: implement in lowering pass */ + goto aa; /* { dg-error "invalid branch to/from" } */ + } +aa: + i = 0; #pragma acc parallel + { /* TODO: implement in lowering pass */ - goto aa /* { dg-error "branch|exit" } */ - #pragma acc end parallel -aa: - i = 0 + +bb: + i = 0; + } + goto bb; /* { dg-error "invalid entry" } */ } diff --git a/gcc/testsuite/gcc.dg/gacc/data-clauses.c b/gcc/testsuite/gcc.dg/gacc/data-clauses.c index c3909873c10..3bb10fed51d 100644 --- a/gcc/testsuite/gcc.dg/gacc/data-clauses.c +++ b/gcc/testsuite/gcc.dg/gacc/data-clauses.c @@ -4,6 +4,8 @@ /* without suarrays, since they are not implemented yet */ /* todo: some of warnings are not necessary */ +#include <stdlib.h> + struct t { int i; }; @@ -14,240 +16,199 @@ void foo (int vi) { float r; float ra[10]; float *rp = &r; - float *aa = malloc(sizeof(float)*2); + float *aa = (float*) malloc(sizeof(float)*2); struct t ti; struct t* tia; struct t tit; struct t *tip = &tit; - #pragma acc parallel deviceptr (rp) /* { dg-error "POINTER" } */ + #pragma acc parallel deviceptr (rp) {} - #pragma acc parallel deviceptr (vi) /* { dg-error "VALUE" } */ + #pragma acc parallel deviceptr (vi) /* { dg-error "must be pointer for" } */ {} - #pragma acc parallel deviceptr (aa) /* { dg-error "dynamically" } */ + #pragma acc parallel deviceptr (i) /* { dg-error "must be pointer for" } */ {} - - #pragma acc parallel deviceptr (i, c, r, ia, ra, ti) + #pragma acc parallel deviceptr (r) /* { dg-error "must be pointer for" } */ {} - #pragma acc kernels deviceptr (i, c, r, ia, ra, ti) + #pragma acc parallel deviceptr (ti) /* { dg-error "must be pointer for" } */ {} - #pragma acc data deviceptr (i, c, r, ia, ra, ti) + #pragma acc parallel deviceptr (aa) /* { dg-error "dynamically" } */ {} - - #pragma acc parallel copy (tip) /* { dg-error "POINTER" } */ + #pragma acc parallel deviceptr (ia) /* { dg-error "must be pointer for" } */ {} - #pragma acc parallel copy (tia) /* { dg-error "ALLOCATABLE" } */ + #pragma acc data deviceptr (ra) /* { dg-error "must be pointer for" } */ {} - #pragma acc parallel deviceptr (i) copy (i) /* { dg-warning "multiple clauses" } */ + + #pragma acc parallel deviceptr (rp) copy (rp) /* { dg-warning "multiple clauses" } */ {} - #pragma acc parallel copy (i, c, r, ia, ra, rp, ti, vi, aa) + #pragma acc parallel copy (i, r, ia, ra, rp, ti, vi, aa, tia, tip) {} - #pragma acc kernels copy (i, c, r, ia, ra, rp, ti, vi, aa) + #pragma acc kernels copy (i, r, ia, ra, rp, ti, vi, aa, tia, tip) {} - #pragma acc data copy (i, c, r, ia, ra, rp, ti, vi, aa) + #pragma acc data copy (i, r, ia, ra, rp, ti, vi, aa, tia, tip) {} - - #pragma acc parallel copyin (tip) /* { dg-error "POINTER" } */ - {} - #pragma acc parallel copyin (tia) /* { dg-error "ALLOCATABLE" } */ + #pragma acc parallel deviceptr (rp) copyin (rp) /* { dg-warning "multiple clauses" } */ {} - #pragma acc parallel deviceptr (i) copyin (i) /* { dg-warning "multiple clauses" } */ - {} - #pragma acc parallel copy (i) copyin (i) /* { dg-warning "multiple clauses" } */ + #pragma acc parallel copy (rp) copyin (rp) /* { dg-warning "multiple clauses" } */ {} - #pragma acc parallel copyin (i, c, r, ia, ra, rp, ti, vi, aa) + #pragma acc parallel copyin (i, r, ia, ra, rp, ti, vi, aa, tia, tip) {} - #pragma acc kernels copyin (i, c, r, ia, ra, rp, ti, vi, aa) + #pragma acc kernels copyin (i, r, ia, ra, rp, ti, vi, aa, tia, tip) {} - #pragma acc data copyin (i, c, r, ia, ra, rp, ti, vi, aa) + #pragma acc data copyin (i, r, ia, ra, rp, ti, vi, aa, tia, tip) {} - - #pragma acc parallel copyout (tip) /* { dg-error "POINTER" } */ - {} - #pragma acc parallel copyout (tia) /* { dg-error "ALLOCATABLE" } */ - {} - #pragma acc parallel deviceptr (i) copyout (i) /* { dg-warning "multiple clauses" } */ + #pragma acc parallel deviceptr (rp) copyout (rp) /* { dg-warning "multiple clauses" } */ {} - #pragma acc parallel copy (i) copyout (i) /* { dg-warning "multiple clauses" } */ + #pragma acc parallel copy (rp) copyout (rp) /* { dg-warning "multiple clauses" } */ {} - #pragma acc parallel copyin (i) copyout (i) /* { dg-warning "multiple clauses" } */ + #pragma acc parallel copyin (rp) copyout (rp) /* { dg-warning "multiple clauses" } */ {} - #pragma acc parallel copyout (i, c, r, ia, ra, rp, ti, vi, aa) + #pragma acc parallel copyout (i, r, ia, ra, rp, ti, vi, aa, tia, tip) {} - #pragma acc kernels copyout (i, c, r, ia, ra, rp, ti, vi, aa) + #pragma acc kernels copyout (i, r, ia, ra, rp, ti, vi, aa, tia, tip) {} - #pragma acc data copyout (i, c, r, ia, ra, rp, ti, vi, aa) + #pragma acc data copyout (i, r, ia, ra, rp, ti, vi, aa, tia, tip) {} - - #pragma acc parallel create (tip) /* { dg-error "POINTER" } */ - {} - #pragma acc parallel create (tia) /* { dg-error "ALLOCATABLE" } */ - {} - #pragma acc parallel deviceptr (i) create (i) /* { dg-warning "multiple clauses" } */ + #pragma acc parallel deviceptr (rp) create (rp) /* { dg-warning "multiple clauses" } */ {} - #pragma acc parallel copy (i) create (i) /* { dg-warning "multiple clauses" } */ + #pragma acc parallel copy (rp) create (rp) /* { dg-warning "multiple clauses" } */ {} - #pragma acc parallel copyin (i) create (i) /* { dg-warning "multiple clauses" } */ + #pragma acc parallel copyin (rp) create (rp) /* { dg-warning "multiple clauses" } */ {} - #pragma acc parallel copyout (i) create (i) /* { dg-warning "multiple clauses" } */ + #pragma acc parallel copyout (rp) create (rp) /* { dg-warning "multiple clauses" } */ {} - #pragma acc parallel create (i, c, r, ia, ra, rp, ti, vi, aa) + #pragma acc parallel create (i, r, ia, ra, rp, ti, vi, aa, tia, tip) {} - #pragma acc kernels create (i, c, r, ia, ra, rp, ti, vi, aa) + #pragma acc kernels create (i, r, ia, ra, rp, ti, vi, aa, tia, tip) {} - #pragma acc data create (i, c, r, ia, ra, rp, ti, vi, aa) + #pragma acc data create (i, r, ia, ra, rp, ti, vi, aa, tia, tip) {} - - #pragma acc parallel present (tip) /* { dg-error "POINTER" } */ - {} - #pragma acc parallel present (tia) /* { dg-error "ALLOCATABLE" } */ + #pragma acc parallel deviceptr (rp) present (rp) /* { dg-warning "multiple clauses" } */ {} - #pragma acc parallel deviceptr (i) present (i) /* { dg-warning "multiple clauses" } */ + #pragma acc parallel copy (rp) present (rp) /* { dg-warning "multiple clauses" } */ {} - #pragma acc parallel copy (i) present (i) /* { dg-warning "multiple clauses" } */ + #pragma acc parallel copyin (rp) present (rp) /* { dg-warning "multiple clauses" } */ {} - #pragma acc parallel copyin (i) present (i) /* { dg-warning "multiple clauses" } */ + #pragma acc parallel copyout (rp) present (rp) /* { dg-warning "multiple clauses" } */ {} - #pragma acc parallel copyout (i) present (i) /* { dg-warning "multiple clauses" } */ - {} - #pragma acc parallel create (i) present (i) /* { dg-warning "multiple clauses" } */ + #pragma acc parallel create (rp) present (rp) /* { dg-warning "multiple clauses" } */ {} - #pragma acc parallel present (i, c, r, ia, ra, rp, ti, vi, aa) + #pragma acc parallel present (i, r, ia, ra, rp, ti, vi, aa, tia, tip) {} - #pragma acc kernels present (i, c, r, ia, ra, rp, ti, vi, aa) + #pragma acc kernels present (i, r, ia, ra, rp, ti, vi, aa, tia, tip) {} - #pragma acc data present (i, c, r, ia, ra, rp, ti, vi, aa) + #pragma acc data present (i, r, ia, ra, rp, ti, vi, aa, tia, tip) {} - #pragma acc parallel pcopy (i, c, r, ia, ra, rp, ti, vi, aa) + #pragma acc parallel pcopy (i, r, ia, ra, rp, ti, vi, aa, tia, tip) {} - #pragma acc parallel pcopyin (i, c, r, ia, ra, rp, ti, vi, aa) + #pragma acc parallel pcopyin (i, r, ia, ra, rp, ti, vi, aa, tia, tip) {} - #pragma acc parallel pcopyout (i, c, r, ia, ra, rp, ti, vi, aa) + #pragma acc parallel pcopyout (i, r, ia, ra, rp, ti, vi, aa, tia, tip) {} - #pragma acc parallel pcreate (i, c, r, ia, ra, rp, ti, vi, aa) + #pragma acc parallel pcreate (i, r, ia, ra, rp, ti, vi, aa, tia, tip) {} - - #pragma acc parallel present_or_copy (tip) /* { dg-error "POINTER" } */ + #pragma acc parallel deviceptr (rp) present_or_copy (rp) /* { dg-warning "multiple clauses" } */ {} - #pragma acc parallel present_or_copy (tia) /* { dg-error "ALLOCATABLE" } */ + #pragma acc parallel copy (rp) present_or_copy (rp) /* { dg-warning "multiple clauses" } */ {} - #pragma acc parallel deviceptr (i) present_or_copy (i) /* { dg-warning "multiple clauses" } */ + #pragma acc parallel copyin (rp) present_or_copy (rp) /* { dg-warning "multiple clauses" } */ {} - #pragma acc parallel copy (i) present_or_copy (i) /* { dg-warning "multiple clauses" } */ + #pragma acc parallel copyout (rp) present_or_copy (rp) /* { dg-warning "multiple clauses" } */ {} - #pragma acc parallel copyin (i) present_or_copy (i) /* { dg-warning "multiple clauses" } */ + #pragma acc parallel create (rp) present_or_copy (rp) /* { dg-warning "multiple clauses" } */ {} - #pragma acc parallel copyout (i) present_or_copy (i) /* { dg-warning "multiple clauses" } */ - {} - #pragma acc parallel create (i) present_or_copy (i) /* { dg-warning "multiple clauses" } */ - {} - #pragma acc parallel present (i) present_or_copy (i) /* { dg-warning "multiple clauses" } */ + #pragma acc parallel present (rp) present_or_copy (rp) /* { dg-warning "multiple clauses" } */ {} - #pragma acc parallel present_or_copy (i, c, r, ia, ra, rp, ti, vi, aa) + #pragma acc parallel present_or_copy (i, r, ia, ra, rp, ti, vi, aa, tia, tip) {} - #pragma acc kernels present_or_copy (i, c, r, ia, ra, rp, ti, vi, aa) + #pragma acc kernels present_or_copy (i, r, ia, ra, rp, ti, vi, aa, tia, tip) {} - #pragma acc data present_or_copy (i, c, r, ia, ra, rp, ti, vi, aa) + #pragma acc data present_or_copy (i, r, ia, ra, rp, ti, vi, aa, tia, tip) {} - - #pragma acc parallel present_or_copyin (tip) /* { dg-error "POINTER" } */ - {} - #pragma acc parallel present_or_copyin (tia) /* { dg-error "ALLOCATABLE" } */ + #pragma acc parallel deviceptr (rp) present_or_copyin (rp) /* { dg-warning "multiple clauses" } */ {} - #pragma acc parallel deviceptr (i) present_or_copyin (i) /* { dg-warning "multiple clauses" } */ + #pragma acc parallel copy (rp) present_or_copyin (rp) /* { dg-warning "multiple clauses" } */ {} - #pragma acc parallel copy (i) present_or_copyin (i) /* { dg-warning "multiple clauses" } */ + #pragma acc parallel copyin (rp) present_or_copyin (rp) /* { dg-warning "multiple clauses" } */ {} - #pragma acc parallel copyin (i) present_or_copyin (i) /* { dg-warning "multiple clauses" } */ + #pragma acc parallel copyout (rp) present_or_copyin (rp) /* { dg-warning "multiple clauses" } */ {} - #pragma acc parallel copyout (i) present_or_copyin (i) /* { dg-warning "multiple clauses" } */ + #pragma acc parallel create (rp) present_or_copyin (rp) /* { dg-warning "multiple clauses" } */ {} - #pragma acc parallel create (i) present_or_copyin (i) /* { dg-warning "multiple clauses" } */ + #pragma acc parallel present (rp) present_or_copyin (rp) /* { dg-warning "multiple clauses" } */ {} - #pragma acc parallel present (i) present_or_copyin (i) /* { dg-warning "multiple clauses" } */ - {} - #pragma acc parallel present_or_copy (i) present_or_copyin (i) /* { dg-warning "multiple clauses" } */ + #pragma acc parallel present_or_copy (rp) present_or_copyin (rp) /* { dg-warning "multiple clauses" } */ {} - #pragma acc parallel present_or_copyin (i, c, r, ia, ra, rp, ti, vi, aa) + #pragma acc parallel present_or_copyin (i, r, ia, ra, rp, ti, vi, aa, tia, tip) {} - #pragma acc kernels present_or_copyin (i, c, r, ia, ra, rp, ti, vi, aa) + #pragma acc kernels present_or_copyin (i, r, ia, ra, rp, ti, vi, aa, tia, tip) {} - #pragma acc data present_or_copyin (i, c, r, ia, ra, rp, ti, vi, aa) + #pragma acc data present_or_copyin (i, r, ia, ra, rp, ti, vi, aa, tia, tip) {} - - #pragma acc parallel present_or_copyout (tip) /* { dg-error "POINTER" } */ - {} - #pragma acc parallel present_or_copyout (tia) /* { dg-error "ALLOCATABLE" } */ - {} - #pragma acc parallel deviceptr (i) present_or_copyout (i) /* { dg-warning "multiple clauses" } */ + #pragma acc parallel deviceptr (rp) present_or_copyout (rp) /* { dg-warning "multiple clauses" } */ {} - #pragma acc parallel copy (i) present_or_copyout (i) /* { dg-warning "multiple clauses" } */ + #pragma acc parallel copy (rp) present_or_copyout (rp) /* { dg-warning "multiple clauses" } */ {} - #pragma acc parallel copyin (i) present_or_copyout (i) /* { dg-warning "multiple clauses" } */ + #pragma acc parallel copyin (rp) present_or_copyout (rp) /* { dg-warning "multiple clauses" } */ {} - #pragma acc parallel copyout (i) present_or_copyout (i) /* { dg-warning "multiple clauses" } */ + #pragma acc parallel copyout (rp) present_or_copyout (rp) /* { dg-warning "multiple clauses" } */ {} - #pragma acc parallel create (i) present_or_copyout (i) /* { dg-warning "multiple clauses" } */ + #pragma acc parallel create (rp) present_or_copyout (rp) /* { dg-warning "multiple clauses" } */ {} - #pragma acc parallel present (i) present_or_copyout (i) /* { dg-warning "multiple clauses" } */ + #pragma acc parallel present (rp) present_or_copyout (rp) /* { dg-warning "multiple clauses" } */ {} - #pragma acc parallel present_or_copy (i) present_or_copyout (i) /* { dg-warning "multiple clauses" } */ + #pragma acc parallel present_or_copy (rp) present_or_copyout (rp) /* { dg-warning "multiple clauses" } */ {} - #pragma acc parallel present_or_copyin (i) present_or_copyout (i) /* { dg-warning "multiple clauses" } */ + #pragma acc parallel present_or_copyin (rp) present_or_copyout (rp) /* { dg-warning "multiple clauses" } */ {} - #pragma acc parallel present_or_copyout (i, c, r, ia, ra, rp, ti, vi, aa) + #pragma acc parallel present_or_copyout (i, r, ia, ra, rp, ti, vi, aa, tia, tip) {} - #pragma acc kernels present_or_copyout (i, c, r, ia, ra, rp, ti, vi, aa) + #pragma acc kernels present_or_copyout (i, r, ia, ra, rp, ti, vi, aa, tia, tip) {} - #pragma acc data present_or_copyout (i, c, r, ia, ra, rp, ti, vi, aa) + #pragma acc data present_or_copyout (i, r, ia, ra, rp, ti, vi, aa, tia, tip) {} - - #pragma acc parallel present_or_create (tip) /* { dg-error "POINTER" } */ - {} - #pragma acc parallel present_or_create (tia) /* { dg-error "ALLOCATABLE" } */ - {} - #pragma acc parallel deviceptr (i) present_or_create (i) /* { dg-warning "multiple clauses" } */ + #pragma acc parallel deviceptr (rp) present_or_create (rp) /* { dg-warning "multiple clauses" } */ {} - #pragma acc parallel copy (i) present_or_create (i) /* { dg-warning "multiple clauses" } */ + #pragma acc parallel copy (rp) present_or_create (rp) /* { dg-warning "multiple clauses" } */ {} - #pragma acc parallel copyin (i) present_or_create (i) /* { dg-warning "multiple clauses" } */ + #pragma acc parallel copyin (rp) present_or_create (rp) /* { dg-warning "multiple clauses" } */ {} - #pragma acc parallel copyout (i) present_or_create (i) /* { dg-warning "multiple clauses" } */ + #pragma acc parallel copyout (rp) present_or_create (rp) /* { dg-warning "multiple clauses" } */ {} - #pragma acc parallel create (i) present_or_create (i) /* { dg-warning "multiple clauses" } */ + #pragma acc parallel create (rp) present_or_create (rp) /* { dg-warning "multiple clauses" } */ {} - #pragma acc parallel present (i) present_or_create (i) /* { dg-warning "multiple clauses" } */ + #pragma acc parallel present (rp) present_or_create (rp) /* { dg-warning "multiple clauses" } */ {} - #pragma acc parallel present_or_copy (i) present_or_create (i) /* { dg-warning "multiple clauses" } */ + #pragma acc parallel present_or_copy (rp) present_or_create (rp) /* { dg-warning "multiple clauses" } */ {} - #pragma acc parallel present_or_copyin (i) present_or_create (i) /* { dg-warning "multiple clauses" } */ + #pragma acc parallel present_or_copyin (rp) present_or_create (rp) /* { dg-warning "multiple clauses" } */ {} - #pragma acc parallel present_or_copyout (i) present_or_create (i) /* { dg-warning "multiple clauses" } */ + #pragma acc parallel present_or_copyout (rp) present_or_create (rp) /* { dg-warning "multiple clauses" } */ {} - #pragma acc parallel present_or_create (i, c, r, ia, ra, rp, ti, vi, aa) + #pragma acc parallel present_or_create (i, r, ia, ra, rp, ti, vi, aa, tia, tip) {} - #pragma acc kernels present_or_create (i, c, r, ia, ra, rp, ti, vi, aa) + #pragma acc kernels present_or_create (i, r, ia, ra, rp, ti, vi, aa, tia, tip) {} - #pragma acc data present_or_create (i, c, r, ia, ra, rp, ti, vi, aa) + #pragma acc data present_or_create (i, r, ia, ra, rp, ti, vi, aa, tia, tip) {} } diff --git a/gcc/testsuite/gcc.dg/gacc/if.c b/gcc/testsuite/gcc.dg/gacc/if.c index 492cdb77876..9593be14123 100644 --- a/gcc/testsuite/gcc.dg/gacc/if.c +++ b/gcc/testsuite/gcc.dg/gacc/if.c @@ -7,29 +7,38 @@ int main() { int x; int i; - #pragma acc parallel if /* { dg-error "Unclassifiable OpenACC directive" } */ - #pragma acc parallel if () /* { dg-error "Invalid character" } */ - #pragma acc parallel if (i) /* { dg-error "scalar LOGICAL expression" } */ + #pragma acc parallel if /* { dg-error "expected" } */ {} - #pragma acc parallel if (1) /* { dg-error "scalar LOGICAL expression" } */ + #pragma acc parallel if () /* { dg-error "expected expression" } */ {} - #pragma acc kernels if (i) /* { dg-error "scalar LOGICAL expression" } */ + #pragma acc parallel if (i) {} - #pragma acc kernels if /* { dg-error "Unclassifiable OpenACC directive" } */ - #pragma acc kernels if () /* { dg-error "Invalid character" } */ - #pragma acc kernels if (1) /* { dg-error "scalar LOGICAL expression" } */ + #pragma acc parallel if (1) {} - #pragma acc data if /* { dg-error "Unclassifiable OpenACC directive" } */ - #pragma acc data if () /* { dg-error "Invalid character" } */ - #pragma acc data if (i) /* { dg-error "scalar LOGICAL expression" } */ + #pragma acc kernels if (i) {} - #pragma acc data if (1) /* { dg-error "scalar LOGICAL expression" } */ + #pragma acc kernels if /* { dg-error "expected" } */ + {} + #pragma acc kernels if () /* { dg-error "expected expression" } */ + {} + #pragma acc kernels if (1) + {} + #pragma acc data if /* { dg-error "expected" } */ + {} + #pragma acc data if () /* { dg-error "expected expression" } */ + {} + #pragma acc data if (i) + {} + #pragma acc data if (1) {} /* at most one if clause may appear */ - #pragma acc parallel if (0) if (0) { dg-error "Unclassifiable OpenACC directive" } - #pragma acc kernels if (0) if (0) { dg-error "Unclassifiable OpenACC directive" } - #pragma acc data if (0) if (0) { dg-error "Unclassifiable OpenACC directive" } + #pragma acc parallel if (0) if (0) /* { dg-error "too many" } */ + {} + #pragma acc kernels if (0) if (0) /* { dg-error "too many" } */ + {} + #pragma acc data if (0) if (0) /* { dg-error "too many" } */ + {} #pragma acc parallel if (x) {} diff --git a/gcc/testsuite/gcc.dg/gacc/loop.c b/gcc/testsuite/gcc.dg/gacc/loop.c index 405905568dd..a869712b5ce 100644 --- a/gcc/testsuite/gcc.dg/gacc/loop.c +++ b/gcc/testsuite/gcc.dg/gacc/loop.c @@ -142,6 +142,13 @@ for (i = 1; i < 3; i++) } } + /* Both seq and independent are not allowed */ + #pragma acc loop independent seq /* { dg-error "not allowed" } */ + for(i = 1; i < 10; i++) + { + } + + #pragma acc cache (a[1]) /* { dg-error "inside of loop" } */ for(i = 1; i < 10; i++) { |