xref: /aosp_15_r20/external/clang/test/SemaCUDA/device-var-init.cu (revision 67e74705e28f6214e480b399dd47ea732279e315)
1*67e74705SXin Li // REQUIRES: nvptx-registered-target
2*67e74705SXin Li 
3*67e74705SXin Li // Make sure we don't allow dynamic initialization for device
4*67e74705SXin Li // variables, but accept empty constructors allowed by CUDA.
5*67e74705SXin Li 
6*67e74705SXin Li // RUN: %clang_cc1 -verify %s -triple nvptx64-nvidia-cuda -fcuda-is-device -std=c++11 %s
7*67e74705SXin Li 
8*67e74705SXin Li #ifdef __clang__
9*67e74705SXin Li #include "Inputs/cuda.h"
10*67e74705SXin Li #endif
11*67e74705SXin Li 
12*67e74705SXin Li // Use the types we share with CodeGen tests.
13*67e74705SXin Li #include "Inputs/cuda-initializers.h"
14*67e74705SXin Li 
15*67e74705SXin Li __shared__ int s_v_i = 1;
16*67e74705SXin Li // expected-error@-1 {{initialization is not supported for __shared__ variables.}}
17*67e74705SXin Li 
18*67e74705SXin Li __device__ int d_v_f = f();
19*67e74705SXin Li // expected-error@-1 {{dynamic initialization is not supported for __device__, __constant__, and __shared__ variables.}}
20*67e74705SXin Li __shared__ int s_v_f = f();
21*67e74705SXin Li // expected-error@-1 {{initialization is not supported for __shared__ variables.}}
22*67e74705SXin Li __constant__ int c_v_f = f();
23*67e74705SXin Li // expected-error@-1 {{dynamic initialization is not supported for __device__, __constant__, and __shared__ variables.}}
24*67e74705SXin Li 
25*67e74705SXin Li __shared__ T s_t_i = {2};
26*67e74705SXin Li // expected-error@-1 {{initialization is not supported for __shared__ variables.}}
27*67e74705SXin Li 
28*67e74705SXin Li __device__ EC d_ec_i(3);
29*67e74705SXin Li // expected-error@-1 {{dynamic initialization is not supported for __device__, __constant__, and __shared__ variables.}}
30*67e74705SXin Li __shared__ EC s_ec_i(3);
31*67e74705SXin Li // expected-error@-1 {{initialization is not supported for __shared__ variables.}}
32*67e74705SXin Li __constant__ EC c_ec_i(3);
33*67e74705SXin Li // expected-error@-1 {{dynamic initialization is not supported for __device__, __constant__, and __shared__ variables.}}
34*67e74705SXin Li 
35*67e74705SXin Li __device__ EC d_ec_i2 = {3};
36*67e74705SXin Li // expected-error@-1 {{dynamic initialization is not supported for __device__, __constant__, and __shared__ variables.}}
37*67e74705SXin Li __shared__ EC s_ec_i2 = {3};
38*67e74705SXin Li // expected-error@-1 {{initialization is not supported for __shared__ variables.}}
39*67e74705SXin Li __constant__ EC c_ec_i2 = {3};
40*67e74705SXin Li // expected-error@-1 {{dynamic initialization is not supported for __device__, __constant__, and __shared__ variables.}}
41*67e74705SXin Li 
42*67e74705SXin Li __device__ ETC d_etc_i(3);
43*67e74705SXin Li // expected-error@-1 {{dynamic initialization is not supported for __device__, __constant__, and __shared__ variables.}}
44*67e74705SXin Li __shared__ ETC s_etc_i(3);
45*67e74705SXin Li // expected-error@-1 {{initialization is not supported for __shared__ variables.}}
46*67e74705SXin Li __constant__ ETC c_etc_i(3);
47*67e74705SXin Li // expected-error@-1 {{dynamic initialization is not supported for __device__, __constant__, and __shared__ variables.}}
48*67e74705SXin Li 
49*67e74705SXin Li __device__ ETC d_etc_i2 = {3};
50*67e74705SXin Li // expected-error@-1 {{dynamic initialization is not supported for __device__, __constant__, and __shared__ variables.}}
51*67e74705SXin Li __shared__ ETC s_etc_i2 = {3};
52*67e74705SXin Li // expected-error@-1 {{initialization is not supported for __shared__ variables.}}
53*67e74705SXin Li __constant__ ETC c_etc_i2 = {3};
54*67e74705SXin Li // expected-error@-1 {{dynamic initialization is not supported for __device__, __constant__, and __shared__ variables.}}
55*67e74705SXin Li 
56*67e74705SXin Li __device__ UC d_uc;
57*67e74705SXin Li // expected-error@-1 {{dynamic initialization is not supported for __device__, __constant__, and __shared__ variables.}}
58*67e74705SXin Li __shared__ UC s_uc;
59*67e74705SXin Li // expected-error@-1 {{initialization is not supported for __shared__ variables.}}
60*67e74705SXin Li __constant__ UC c_uc;
61*67e74705SXin Li // expected-error@-1 {{dynamic initialization is not supported for __device__, __constant__, and __shared__ variables.}}
62*67e74705SXin Li 
63*67e74705SXin Li __device__ UD d_ud;
64*67e74705SXin Li // expected-error@-1 {{dynamic initialization is not supported for __device__, __constant__, and __shared__ variables.}}
65*67e74705SXin Li __shared__ UD s_ud;
66*67e74705SXin Li // expected-error@-1 {{initialization is not supported for __shared__ variables.}}
67*67e74705SXin Li __constant__ UD c_ud;
68*67e74705SXin Li // expected-error@-1 {{dynamic initialization is not supported for __device__, __constant__, and __shared__ variables.}}
69*67e74705SXin Li 
70*67e74705SXin Li __device__ ECI d_eci;
71*67e74705SXin Li // expected-error@-1 {{dynamic initialization is not supported for __device__, __constant__, and __shared__ variables.}}
72*67e74705SXin Li __shared__ ECI s_eci;
73*67e74705SXin Li // expected-error@-1 {{initialization is not supported for __shared__ variables.}}
74*67e74705SXin Li __constant__ ECI c_eci;
75*67e74705SXin Li // expected-error@-1 {{dynamic initialization is not supported for __device__, __constant__, and __shared__ variables.}}
76*67e74705SXin Li 
77*67e74705SXin Li __device__ NEC d_nec;
78*67e74705SXin Li // expected-error@-1 {{dynamic initialization is not supported for __device__, __constant__, and __shared__ variables.}}
79*67e74705SXin Li __shared__ NEC s_nec;
80*67e74705SXin Li // expected-error@-1 {{initialization is not supported for __shared__ variables.}}
81*67e74705SXin Li __constant__ NEC c_nec;
82*67e74705SXin Li // expected-error@-1 {{dynamic initialization is not supported for __device__, __constant__, and __shared__ variables.}}
83*67e74705SXin Li 
84*67e74705SXin Li __device__ NED d_ned;
85*67e74705SXin Li // expected-error@-1 {{dynamic initialization is not supported for __device__, __constant__, and __shared__ variables.}}
86*67e74705SXin Li __shared__ NED s_ned;
87*67e74705SXin Li // expected-error@-1 {{initialization is not supported for __shared__ variables.}}
88*67e74705SXin Li __constant__ NED c_ned;
89*67e74705SXin Li // expected-error@-1 {{dynamic initialization is not supported for __device__, __constant__, and __shared__ variables.}}
90*67e74705SXin Li 
91*67e74705SXin Li __device__ NCV d_ncv;
92*67e74705SXin Li // expected-error@-1 {{dynamic initialization is not supported for __device__, __constant__, and __shared__ variables.}}
93*67e74705SXin Li __shared__ NCV s_ncv;
94*67e74705SXin Li // expected-error@-1 {{initialization is not supported for __shared__ variables.}}
95*67e74705SXin Li __constant__ NCV c_ncv;
96*67e74705SXin Li // expected-error@-1 {{dynamic initialization is not supported for __device__, __constant__, and __shared__ variables.}}
97*67e74705SXin Li 
98*67e74705SXin Li __device__ VD d_vd;
99*67e74705SXin Li // expected-error@-1 {{dynamic initialization is not supported for __device__, __constant__, and __shared__ variables.}}
100*67e74705SXin Li __shared__ VD s_vd;
101*67e74705SXin Li // expected-error@-1 {{initialization is not supported for __shared__ variables.}}
102*67e74705SXin Li __constant__ VD c_vd;
103*67e74705SXin Li // expected-error@-1 {{dynamic initialization is not supported for __device__, __constant__, and __shared__ variables.}}
104*67e74705SXin Li 
105*67e74705SXin Li __device__ NCF d_ncf;
106*67e74705SXin Li // expected-error@-1 {{dynamic initialization is not supported for __device__, __constant__, and __shared__ variables.}}
107*67e74705SXin Li __shared__ NCF s_ncf;
108*67e74705SXin Li // expected-error@-1 {{initialization is not supported for __shared__ variables.}}
109*67e74705SXin Li __constant__ NCF c_ncf;
110*67e74705SXin Li // expected-error@-1 {{dynamic initialization is not supported for __device__, __constant__, and __shared__ variables.}}
111*67e74705SXin Li 
112*67e74705SXin Li __shared__ NCFS s_ncfs;
113*67e74705SXin Li // expected-error@-1 {{initialization is not supported for __shared__ variables.}}
114*67e74705SXin Li 
115*67e74705SXin Li __device__ UTC d_utc;
116*67e74705SXin Li // expected-error@-1 {{dynamic initialization is not supported for __device__, __constant__, and __shared__ variables.}}
117*67e74705SXin Li __shared__ UTC s_utc;
118*67e74705SXin Li // expected-error@-1 {{initialization is not supported for __shared__ variables.}}
119*67e74705SXin Li __constant__ UTC c_utc;
120*67e74705SXin Li // expected-error@-1 {{dynamic initialization is not supported for __device__, __constant__, and __shared__ variables.}}
121*67e74705SXin Li 
122*67e74705SXin Li __device__ UTC d_utc_i(3);
123*67e74705SXin Li // expected-error@-1 {{dynamic initialization is not supported for __device__, __constant__, and __shared__ variables.}}
124*67e74705SXin Li __shared__ UTC s_utc_i(3);
125*67e74705SXin Li // expected-error@-1 {{initialization is not supported for __shared__ variables.}}
126*67e74705SXin Li __constant__ UTC c_utc_i(3);
127*67e74705SXin Li // expected-error@-1 {{dynamic initialization is not supported for __device__, __constant__, and __shared__ variables.}}
128*67e74705SXin Li 
129*67e74705SXin Li __device__ NETC d_netc;
130*67e74705SXin Li // expected-error@-1 {{dynamic initialization is not supported for __device__, __constant__, and __shared__ variables.}}
131*67e74705SXin Li __shared__ NETC s_netc;
132*67e74705SXin Li // expected-error@-1 {{initialization is not supported for __shared__ variables.}}
133*67e74705SXin Li __constant__ NETC c_netc;
134*67e74705SXin Li // expected-error@-1 {{dynamic initialization is not supported for __device__, __constant__, and __shared__ variables.}}
135*67e74705SXin Li 
136*67e74705SXin Li __device__ NETC d_netc_i(3);
137*67e74705SXin Li // expected-error@-1 {{dynamic initialization is not supported for __device__, __constant__, and __shared__ variables.}}
138*67e74705SXin Li __shared__ NETC s_netc_i(3);
139*67e74705SXin Li // expected-error@-1 {{initialization is not supported for __shared__ variables.}}
140*67e74705SXin Li __constant__ NETC c_netc_i(3);
141*67e74705SXin Li // expected-error@-1 {{dynamic initialization is not supported for __device__, __constant__, and __shared__ variables.}}
142*67e74705SXin Li 
143*67e74705SXin Li __device__ EC_I_EC1 d_ec_i_ec1;
144*67e74705SXin Li // expected-error@-1 {{dynamic initialization is not supported for __device__, __constant__, and __shared__ variables.}}
145*67e74705SXin Li __shared__ EC_I_EC1 s_ec_i_ec1;
146*67e74705SXin Li // expected-error@-1 {{initialization is not supported for __shared__ variables.}}
147*67e74705SXin Li __constant__ EC_I_EC1 c_ec_i_ec1;
148*67e74705SXin Li // expected-error@-1 {{dynamic initialization is not supported for __device__, __constant__, and __shared__ variables.}}
149*67e74705SXin Li 
150*67e74705SXin Li __device__ T_V_T d_t_v_t;
151*67e74705SXin Li // expected-error@-1 {{dynamic initialization is not supported for __device__, __constant__, and __shared__ variables.}}
152*67e74705SXin Li __shared__ T_V_T s_t_v_t;
153*67e74705SXin Li // expected-error@-1 {{initialization is not supported for __shared__ variables.}}
154*67e74705SXin Li __constant__ T_V_T c_t_v_t;
155*67e74705SXin Li // expected-error@-1 {{dynamic initialization is not supported for __device__, __constant__, and __shared__ variables.}}
156*67e74705SXin Li 
157*67e74705SXin Li __device__ T_B_NEC d_t_b_nec;
158*67e74705SXin Li // expected-error@-1 {{dynamic initialization is not supported for __device__, __constant__, and __shared__ variables.}}
159*67e74705SXin Li __shared__ T_B_NEC s_t_b_nec;
160*67e74705SXin Li // expected-error@-1 {{initialization is not supported for __shared__ variables.}}
161*67e74705SXin Li __constant__ T_B_NEC c_t_b_nec;
162*67e74705SXin Li // expected-error@-1 {{dynamic initialization is not supported for __device__, __constant__, and __shared__ variables.}}
163*67e74705SXin Li 
164*67e74705SXin Li __device__ T_F_NEC d_t_f_nec;
165*67e74705SXin Li // expected-error@-1 {{dynamic initialization is not supported for __device__, __constant__, and __shared__ variables.}}
166*67e74705SXin Li __shared__ T_F_NEC s_t_f_nec;
167*67e74705SXin Li // expected-error@-1 {{initialization is not supported for __shared__ variables.}}
168*67e74705SXin Li __constant__ T_F_NEC c_t_f_nec;
169*67e74705SXin Li // expected-error@-1 {{dynamic initialization is not supported for __device__, __constant__, and __shared__ variables.}}
170*67e74705SXin Li 
171*67e74705SXin Li __device__ T_FA_NEC d_t_fa_nec;
172*67e74705SXin Li // expected-error@-1 {{dynamic initialization is not supported for __device__, __constant__, and __shared__ variables.}}
173*67e74705SXin Li __shared__ T_FA_NEC s_t_fa_nec;
174*67e74705SXin Li // expected-error@-1 {{initialization is not supported for __shared__ variables.}}
175*67e74705SXin Li __constant__ T_FA_NEC c_t_fa_nec;
176*67e74705SXin Li // expected-error@-1 {{dynamic initialization is not supported for __device__, __constant__, and __shared__ variables.}}
177*67e74705SXin Li 
178*67e74705SXin Li __device__ T_B_NED d_t_b_ned;
179*67e74705SXin Li // expected-error@-1 {{dynamic initialization is not supported for __device__, __constant__, and __shared__ variables.}}
180*67e74705SXin Li __shared__ T_B_NED s_t_b_ned;
181*67e74705SXin Li // expected-error@-1 {{initialization is not supported for __shared__ variables.}}
182*67e74705SXin Li __constant__ T_B_NED c_t_b_ned;
183*67e74705SXin Li // expected-error@-1 {{dynamic initialization is not supported for __device__, __constant__, and __shared__ variables.}}
184*67e74705SXin Li 
185*67e74705SXin Li __device__ T_F_NED d_t_f_ned;
186*67e74705SXin Li // expected-error@-1 {{dynamic initialization is not supported for __device__, __constant__, and __shared__ variables.}}
187*67e74705SXin Li __shared__ T_F_NED s_t_f_ned;
188*67e74705SXin Li // expected-error@-1 {{initialization is not supported for __shared__ variables.}}
189*67e74705SXin Li __constant__ T_F_NED c_t_f_ned;
190*67e74705SXin Li // expected-error@-1 {{dynamic initialization is not supported for __device__, __constant__, and __shared__ variables.}}
191*67e74705SXin Li 
192*67e74705SXin Li __device__ T_FA_NED d_t_fa_ned;
193*67e74705SXin Li // expected-error@-1 {{dynamic initialization is not supported for __device__, __constant__, and __shared__ variables.}}
194*67e74705SXin Li __shared__ T_FA_NED s_t_fa_ned;
195*67e74705SXin Li // expected-error@-1 {{initialization is not supported for __shared__ variables.}}
196*67e74705SXin Li __constant__ T_FA_NED c_t_fa_ned;
197*67e74705SXin Li // expected-error@-1 {{dynamic initialization is not supported for __device__, __constant__, and __shared__ variables.}}
198*67e74705SXin Li 
199*67e74705SXin Li // Verify that only __shared__ local variables may be static on device
200*67e74705SXin Li // side and that they are not allowed to be initialized.
df_sema()201*67e74705SXin Li __device__ void df_sema() {
202*67e74705SXin Li   static __shared__ NCFS s_ncfs;
203*67e74705SXin Li   // expected-error@-1 {{initialization is not supported for __shared__ variables.}}
204*67e74705SXin Li   static __shared__ UC s_uc;
205*67e74705SXin Li   // expected-error@-1 {{initialization is not supported for __shared__ variables.}}
206*67e74705SXin Li   static __shared__ NED s_ned;
207*67e74705SXin Li   // expected-error@-1 {{initialization is not supported for __shared__ variables.}}
208*67e74705SXin Li 
209*67e74705SXin Li   static __device__ int ds;
210*67e74705SXin Li   // expected-error@-1 {{Within a __device__/__global__ function, only __shared__ variables may be marked "static"}}
211*67e74705SXin Li   static __constant__ int dc;
212*67e74705SXin Li   // expected-error@-1 {{Within a __device__/__global__ function, only __shared__ variables may be marked "static"}}
213*67e74705SXin Li   static int v;
214*67e74705SXin Li   // expected-error@-1 {{Within a __device__/__global__ function, only __shared__ variables may be marked "static"}}
215*67e74705SXin Li }
216