1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191
|
/* Test invalid use of the OpenACC 'declare' directive. */
#pragma acc declare /* { dg-error "no valid clauses" } */
#pragma acc declare create(undeclared) /* { dg-error "undeclared" } */
/* { dg-error "no valid clauses" "second error" { target *-*-* } .-1 } */
int v0[10];
#pragma acc declare create(v0[1:3]) /* { dg-error "array section" } */
int v1;
#pragma acc declare create(v1, v1) /* { dg-error "more than once" } */
int v2;
#pragma acc declare create(v2)
#pragma acc declare copyin(v2) /* { dg-error "more than once" } */
int v3;
#pragma acc declare copy(v3) /* { dg-error "at file scope" } */
int v4;
#pragma acc declare copyout(v4) /* { dg-error "at file scope" } */
int v5;
#pragma acc declare present(v5) /* { dg-error "at file scope" } */
int v6;
#pragma acc declare present_or_copy(v6) /* { dg-error "at file scope" } */
int v7;
#pragma acc declare present_or_copyout(v7) /* { dg-error "at file scope" } */
int va10;
#pragma acc declare create (va10)
#pragma acc declare link (va10) /* { dg-error "more than once" } */
int va11;
#pragma acc declare link (va11)
#pragma acc declare link (va11) /* { dg-error "more than once" } */
int va12;
#pragma acc declare create (va12) link (va12) /* { dg-error "more than once" } */
void
f (void)
{
int va0;
#pragma acc declare link(va0) /* { dg-error "global variable" } */
extern int ve0;
#pragma acc declare copy(ve0) /* { dg-error "invalid use of" } */
extern int ve1;
#pragma acc declare copyout(ve1) /* { dg-error "invalid use of" } */
extern int ve2;
#pragma acc declare present(ve2) /* { dg-error "invalid use of" } */
extern int ve3;
#pragma acc declare present_or_copy(ve3) /* { dg-error "invalid use of" } */
extern int ve4;
#pragma acc declare present_or_copyout(ve4) /* { dg-error "invalid use of" } */
#pragma acc declare present (v2) /* { dg-error "invalid use of" } */
}
/* The same as 'f' but everything contained in an OpenACC 'data' construct. */
void
f_data (void)
{
#pragma acc data
{
int va0;
# pragma acc declare link(va0) /* { dg-error "global variable" } */
extern int ve0;
# pragma acc declare copy(ve0) /* { dg-error "invalid use of" } */
extern int ve1;
# pragma acc declare copyout(ve1) /* { dg-error "invalid use of" } */
extern int ve2;
# pragma acc declare present(ve2) /* { dg-error "invalid use of" } */
extern int ve3;
# pragma acc declare present_or_copy(ve3) /* { dg-error "invalid use of" } */
extern int ve4;
# pragma acc declare present_or_copyout(ve4) /* { dg-error "invalid use of" } */
# pragma acc declare present (v2) /* { dg-error "invalid use of" } */
}
}
/* Testing for PR90868 "Duplicate OpenACC 'declare' directives for 'extern'
variables". */
void
f_pr90868 (void)
{
extern int we0;
#pragma acc declare create(we0)
extern int we1;
#pragma acc declare copyin(we1)
extern int *we2;
#pragma acc declare deviceptr(we2)
extern int we3;
#pragma acc declare device_resident(we3)
extern int we4;
#pragma acc declare link(we4)
extern int we5;
#pragma acc declare present_or_copyin(we5)
extern int we6;
#pragma acc declare present_or_create(we6)
}
/* The same as 'f_pr90868'. */
/* The errors are emitted for C only; for C++, the duplicate OpenACC 'declare'
directives for 'extern' variables are accepted. */
void
f_pr90868_2 (void)
{
extern int we0;
#pragma acc declare create(we0) /* { dg-error "variable 'we0' used more than once with '#pragma acc declare'" } */
extern int we1;
#pragma acc declare copyin(we1) /* { dg-error "variable 'we1' used more than once with '#pragma acc declare'" } */
extern int *we2;
#pragma acc declare deviceptr(we2) /* { dg-error "variable 'we2' used more than once with '#pragma acc declare'" } */
extern int we3;
#pragma acc declare device_resident(we3) /* { dg-error "variable 'we3' used more than once with '#pragma acc declare'" } */
extern int we4;
#pragma acc declare link(we4) /* { dg-error "variable 'we4' used more than once with '#pragma acc declare'" } */
extern int we5;
#pragma acc declare present_or_copyin(we5) /* { dg-error "variable 'we5' used more than once with '#pragma acc declare'" } */
extern int we6;
#pragma acc declare present_or_create(we6) /* { dg-error "variable 'we6' used more than once with '#pragma acc declare'" } */
}
/* The same as 'f_pr90868' but everything contained in an OpenACC 'data'
construct. */
void
f_pr90868_data (void)
{
#pragma acc data
{
extern int we0;
# pragma acc declare create(we0) /* { dg-error "variable 'we0' used more than once with '#pragma acc declare'" } */
extern int we1;
# pragma acc declare copyin(we1) /* { dg-error "variable 'we1' used more than once with '#pragma acc declare'" } */
extern int *we2;
# pragma acc declare deviceptr(we2) /* { dg-error "variable 'we2' used more than once with '#pragma acc declare'" } */
extern int we3;
# pragma acc declare device_resident(we3) /* { dg-error "variable 'we3' used more than once with '#pragma acc declare'" } */
extern int we4;
# pragma acc declare link(we4) /* { dg-error "variable 'we4' used more than once with '#pragma acc declare'" } */
extern int we5;
# pragma acc declare present_or_copyin(we5) /* { dg-error "variable 'we5' used more than once with '#pragma acc declare'" } */
extern int we6;
# pragma acc declare present_or_create(we6) /* { dg-error "variable 'we6' used more than once with '#pragma acc declare'" } */
}
}
|