1
2
3
4
5
6
7 package builtins
8
9 import "unsafe"
10
11
12
13 func _[T any](x T) {
14 clear(x )
15 }
16
17 func _[T ~map[int]string | ~[]byte](x T) {
18 clear(x)
19 }
20
21 func _[T ~map[int]string | ~[]byte | ~*[10]int | string](x T) {
22 clear(x )
23 }
24
25
26
27 type C0 interface{ int }
28 type C1 interface{ chan int }
29 type C2 interface{ chan int | <-chan int }
30 type C3 interface{ chan int | chan float32 }
31 type C4 interface{ chan int | chan<- int }
32 type C5[T any] interface{ ~chan T | chan<- T }
33
34 func _[T any](ch T) {
35 close(ch )
36 }
37
38 func _[T C0](ch T) {
39 close(ch )
40 }
41
42 func _[T C1](ch T) {
43 close(ch)
44 }
45
46 func _[T C2](ch T) {
47 close(ch )
48 }
49
50 func _[T C3](ch T) {
51 close(ch)
52 }
53
54 func _[T C4](ch T) {
55 close(ch)
56 }
57
58 func _[T C5[X], X any](ch T) {
59 close(ch)
60 }
61
62
63
64 func _[T any](x, y T) {
65 copy(x , y)
66 }
67
68 func _[T ~[]byte](x, y T) {
69 copy(x, y)
70 copy(x, "foo")
71 copy("foo" , y)
72
73 var x2 []byte
74 copy(x2, y)
75 copy(y, x2)
76
77 type myByte byte
78 var x3 []myByte
79 copy(x3 , y)
80 copy(y , x3)
81 }
82
83 func _[T ~[]E, E any](x T, y []E) {
84 copy(x, y)
85 copy(x , "foo")
86 }
87
88 func _[T ~string](x []byte, y T) {
89 copy(x, y)
90 copy(y , x)
91 }
92
93 func _[T ~[]byte|~string](x T, y []byte) {
94 copy(x , y)
95 copy(y, x)
96 }
97
98 type L0 []int
99 type L1 []int
100
101 func _[T L0 | L1](x, y T) {
102 copy(x, y)
103 }
104
105
106
107 type M0 interface{ int }
108 type M1 interface{ map[string]int }
109 type M2 interface { map[string]int | map[string]float64 }
110 type M3 interface{ map[string]int | map[rune]int }
111 type M4[K comparable, V any] interface{ map[K]V | map[rune]V }
112
113 func _[T any](m T) {
114 delete(m , "foo")
115 }
116
117 func _[T M0](m T) {
118 delete(m , "foo")
119 }
120
121 func _[T M1](m T) {
122 delete(m, "foo")
123 }
124
125 func _[T M2](m T) {
126 delete(m, "foo")
127 delete(m, 0 )
128 }
129
130 func _[T M3](m T) {
131 delete(m , "foo")
132 }
133
134 func _[T M4[rune, V], V any](m T) {
135 delete(m, 'k')
136 }
137
138 func _[T M4[K, V], K comparable, V any](m T) {
139 delete(m , "foo")
140 }
141
142
143
144 type myChan chan int
145
146 func _[
147 S1 ~[]int,
148 S2 ~[]int | ~chan int,
149
150 M1 ~map[string]int,
151 M2 ~map[string]int | ~chan int,
152
153 C1 ~chan int,
154 C2 ~chan int | ~chan string,
155 C3 chan int | myChan,
156 ]() {
157 type S0 []int
158 _ = make([]int, 10)
159 _ = make(S0, 10)
160 _ = make(S1, 10)
161 _ = make()
162 _ = make (S1)
163 _ = make(S1, 10, 20)
164 _ = make (S1, 10, 20, 30)
165 _ = make(S2 , 10)
166
167 type M0 map[string]int
168 _ = make(map[string]int)
169 _ = make(M0)
170 _ = make(M1)
171 _ = make(M1, 10)
172 _ = make(M1, 10, 20)
173 _ = make(M2 )
174
175 type C0 chan int
176 _ = make(chan int)
177 _ = make(C0)
178 _ = make(C1)
179 _ = make(C1, 10)
180 _ = make(C1, 10, 20)
181 _ = make(C2 )
182 _ = make(C3)
183 }
184
185
186
187 func _[
188 P1 ~int|~float64,
189 P2 ~int|~string|~uint,
190 P3 ~int|bool,
191 ]() {
192 var x1 P1
193 _ = max(x1)
194 _ = max(x1, x1)
195 _ = max(1, x1, 2)
196 const _ = max (1, x1, 2)
197
198 var x2 P2
199 _ = max(x2)
200 _ = max(x2, x2)
201 _ = max(1, 2 , x2)
202
203 _ = max(x1, x2 )
204 }
205
206
207
208 func _[
209 P1 ~int|~float64,
210 P2 ~int|~string|~uint,
211 P3 ~int|bool,
212 ]() {
213 var x1 P1
214 _ = min(x1)
215 _ = min(x1, x1)
216 _ = min(1, x1, 2)
217 const _ = min (1, x1, 2)
218
219 var x2 P2
220 _ = min(x2)
221 _ = min(x2, x2)
222 _ = min(1 , 2, x2)
223
224 _ = min(x1, x2 )
225 }
226
227
228
229 func _[T comparable]() {
230 var (
231 b int64
232 a [10]T
233 s struct{ f T }
234 p *T
235 l []T
236 f func(T)
237 i interface{ m() T }
238 c chan T
239 m map[T]T
240 t T
241 )
242
243 const bb = unsafe.Alignof(b)
244 assert(bb == 8)
245 const _ = unsafe .Alignof(a)
246 const _ = unsafe .Alignof(s)
247 const pp = unsafe.Alignof(p)
248 assert(pp == 8)
249 const ll = unsafe.Alignof(l)
250 assert(ll == 8)
251 const ff = unsafe.Alignof(f)
252 assert(ff == 8)
253 const ii = unsafe.Alignof(i)
254 assert(ii == 8)
255 const cc = unsafe.Alignof(c)
256 assert(cc == 8)
257 const mm = unsafe.Alignof(m)
258 assert(mm == 8)
259 const _ = unsafe .Alignof(t)
260 }
261
262
263
264 func _[T comparable]() {
265 var (
266 b struct{ _, f int64 }
267 a struct{ _, f [10]T }
268 s struct{ _, f struct{ f T } }
269 p struct{ _, f *T }
270 l struct{ _, f []T }
271 f struct{ _, f func(T) }
272 i struct{ _, f interface{ m() T } }
273 c struct{ _, f chan T }
274 m struct{ _, f map[T]T }
275 t struct{ _, f T }
276 )
277
278 const bb = unsafe.Offsetof(b.f)
279 assert(bb == 8)
280 const _ = unsafe .Alignof(a)
281 const _ = unsafe .Alignof(s)
282 const pp = unsafe.Offsetof(p.f)
283 assert(pp == 8)
284 const ll = unsafe.Offsetof(l.f)
285 assert(ll == 24)
286 const ff = unsafe.Offsetof(f.f)
287 assert(ff == 8)
288 const ii = unsafe.Offsetof(i.f)
289 assert(ii == 16)
290 const cc = unsafe.Offsetof(c.f)
291 assert(cc == 8)
292 const mm = unsafe.Offsetof(m.f)
293 assert(mm == 8)
294 const _ = unsafe .Alignof(t)
295 }
296
297
298
299 func _[T comparable]() {
300 var (
301 b int64
302 a [10]T
303 s struct{ f T }
304 p *T
305 l []T
306 f func(T)
307 i interface{ m() T }
308 c chan T
309 m map[T]T
310 t T
311 )
312
313 const bb = unsafe.Sizeof(b)
314 assert(bb == 8)
315 const _ = unsafe .Alignof(a)
316 const _ = unsafe .Alignof(s)
317 const pp = unsafe.Sizeof(p)
318 assert(pp == 8)
319 const ll = unsafe.Sizeof(l)
320 assert(ll == 24)
321 const ff = unsafe.Sizeof(f)
322 assert(ff == 8)
323 const ii = unsafe.Sizeof(i)
324 assert(ii == 16)
325 const cc = unsafe.Sizeof(c)
326 assert(cc == 8)
327 const mm = unsafe.Sizeof(m)
328 assert(mm == 8)
329 const _ = unsafe .Alignof(t)
330 }
331
View as plain text