aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIlmir Usmanov <i.usmanov@samsung.com>2013-12-11 17:47:52 +0000
committerIlmir Usmanov <i.usmanov@samsung.com>2013-12-11 17:47:52 +0000
commit47c2bcf85ab41c197bdfc9538a3e4abb0634ceae (patch)
tree3cd5731cc660e62e90def2fb3189e9be7c51185d
parentc4b74ab4891ac8171915e2def1c44883e1a74377 (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.ACC14
-rw-r--r--gcc/c/c-parser.c57
-rw-r--r--gcc/testsuite/gcc.dg/gacc/branch.c64
-rw-r--r--gcc/testsuite/gcc.dg/gacc/data-clauses.c215
-rw-r--r--gcc/testsuite/gcc.dg/gacc/if.c39
-rw-r--r--gcc/testsuite/gcc.dg/gacc/loop.c7
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++)
{