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