blob: 35e4500456187b79715266efec117fead38b64ef (
plain)
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'" } */
}
}
|