comparison gcc/testsuite/c-c++-common/goacc/declare-2.c @ 145:1830386684a0

gcc-9.2.0
author anatofuz
date Thu, 13 Feb 2020 11:34:05 +0900
parents 84e7813d76e9
children
comparison
equal deleted inserted replaced
131:84e7813d76e9 145:1830386684a0
1 /* Test invalid uses of declare directive. */ 1 /* Test invalid use of the OpenACC 'declare' directive. */
2 /* { dg-do compile } */ 2
3 3
4 #pragma acc declare /* { dg-error "no valid clauses" } */ 4 #pragma acc declare /* { dg-error "no valid clauses" } */
5 5
6 #pragma acc declare create(undeclared) /* { dg-error "undeclared" } */ 6 #pragma acc declare create(undeclared) /* { dg-error "undeclared" } */
7 /* { dg-error "no valid clauses" "second error" { target *-*-* } .-1 } */ 7 /* { dg-error "no valid clauses" "second error" { target *-*-* } .-1 } */
40 #pragma acc declare link (va11) /* { dg-error "more than once" } */ 40 #pragma acc declare link (va11) /* { dg-error "more than once" } */
41 41
42 int va12; 42 int va12;
43 #pragma acc declare create (va12) link (va12) /* { dg-error "more than once" } */ 43 #pragma acc declare create (va12) link (va12) /* { dg-error "more than once" } */
44 44
45
45 void 46 void
46 f (void) 47 f (void)
47 { 48 {
48 int va0; 49 int va0;
49 #pragma acc declare link(va0) /* { dg-error "global variable" } */ 50 #pragma acc declare link(va0) /* { dg-error "global variable" } */
63 extern int ve4; 64 extern int ve4;
64 #pragma acc declare present_or_copyout(ve4) /* { dg-error "invalid use of" } */ 65 #pragma acc declare present_or_copyout(ve4) /* { dg-error "invalid use of" } */
65 66
66 #pragma acc declare present (v2) /* { dg-error "invalid use of" } */ 67 #pragma acc declare present (v2) /* { dg-error "invalid use of" } */
67 } 68 }
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