1 // Copyright 2019 The Fuchsia Authors
2 //
3 // Licensed under a BSD-style license <LICENSE-BSD>, Apache License, Version 2.0
4 // <LICENSE-APACHE or https://www.apache.org/licenses/LICENSE-2.0>, or the MIT
5 // license <LICENSE-MIT or https://opensource.org/licenses/MIT>, at your option.
6 // This file may not be copied, modified, or distributed except according to
7 // those terms.
8
9 #[macro_use]
10 extern crate zerocopy;
11
main()12 fn main() {}
13
14 //
15 // Generic errors
16 //
17
18 #[derive(FromBytes)]
19 #[repr("foo")]
20 enum Generic1 {
21 A,
22 }
23
24 #[derive(FromBytes)]
25 #[repr(foo)]
26 enum Generic2 {
27 A,
28 }
29
30 #[derive(FromBytes)]
31 #[repr(transparent)]
32 enum Generic3 {
33 A,
34 }
35
36 #[derive(FromBytes)]
37 #[repr(u8, u16)]
38 enum Generic4 {
39 A,
40 }
41
42 #[derive(FromBytes)]
43 enum Generic5 {
44 A,
45 }
46
47 //
48 // Immutable errors
49 //
50
51 #[derive(Immutable)]
52 enum Immutable1 {
53 A(core::cell::UnsafeCell<()>),
54 }
55
56 #[derive(Immutable)]
57 enum Never {}
58
59 #[derive(Immutable)]
60 enum Immutable2 {
61 Uninhabited(Never, core::cell::UnsafeCell<u8>),
62 Inhabited(u8),
63 }
64
65 //
66 // TryFromBytes errors
67 //
68
69 #[derive(TryFromBytes)]
70 enum TryFromBytes1 {
71 A,
72 }
73
74 #[derive(TryFromBytes)]
75 enum TryFromBytes2 {
76 A,
77 B(u8),
78 }
79
80 struct NotTryFromBytes;
81
82 #[derive(TryFromBytes)]
83 #[repr(u8)]
84 enum TryFromBytes3 {
85 A(NotTryFromBytes),
86 }
87
88 //
89 // FromZeros errors
90 //
91
92 #[derive(FromZeros)]
93 enum FromZeros1 {
94 A(u8),
95 }
96
97 #[derive(FromZeros)]
98 enum FromZeros2 {
99 A,
100 B(u8),
101 }
102
103 #[derive(FromZeros)]
104 enum FromZeros3 {
105 A = 1,
106 B,
107 }
108
109 #[derive(FromZeros)]
110 #[repr(u8)]
111 enum FromZeros4 {
112 A = 1,
113 B = 2,
114 }
115
116 const NEGATIVE_ONE: i8 = -1;
117
118 #[derive(FromZeros)]
119 #[repr(i8)]
120 enum FromZeros5 {
121 A = NEGATIVE_ONE,
122 B,
123 }
124
125 struct NotFromZeros;
126
127 #[derive(FromZeros)]
128 #[repr(u8)]
129 enum FromZeros6 {
130 A(NotFromZeros),
131 }
132
133 #[derive(FromZeros)]
134 #[repr(u8)]
135 enum FromZeros7 {
136 A = 1,
137 B(NotFromZeros),
138 }
139
140 //
141 // FromBytes errors
142 //
143
144 #[derive(FromBytes)]
145 enum FromBytes1 {
146 A,
147 }
148
149 #[derive(FromBytes)]
150 #[repr(C)]
151 enum FromBytes2 {
152 A,
153 }
154
155 #[derive(FromBytes)]
156 #[repr(usize)]
157 enum FromBytes3 {
158 A,
159 }
160
161 #[derive(FromBytes)]
162 #[repr(isize)]
163 enum FromBytes4 {
164 A,
165 }
166
167 #[derive(FromBytes)]
168 #[repr(u32)]
169 enum FromBytes5 {
170 A,
171 }
172
173 #[derive(FromBytes)]
174 #[repr(i32)]
175 enum FromBytes6 {
176 A,
177 }
178
179 #[derive(FromBytes)]
180 #[repr(u64)]
181 enum FromBytes7 {
182 A,
183 }
184
185 #[derive(FromBytes)]
186 #[repr(i64)]
187 enum FromBytes8 {
188 A,
189 }
190
191 #[derive(FromBytes)]
192 #[repr(u8)]
193 enum FooU8 {
194 Variant0,
195 Variant1,
196 Variant2,
197 Variant3,
198 Variant4,
199 Variant5,
200 Variant6,
201 Variant7,
202 Variant8,
203 Variant9,
204 Variant10,
205 Variant11,
206 Variant12,
207 Variant13,
208 Variant14,
209 Variant15,
210 Variant16,
211 Variant17,
212 Variant18,
213 Variant19,
214 Variant20,
215 Variant21,
216 Variant22,
217 Variant23,
218 Variant24,
219 Variant25,
220 Variant26,
221 Variant27,
222 Variant28,
223 Variant29,
224 Variant30,
225 Variant31,
226 Variant32,
227 Variant33,
228 Variant34,
229 Variant35,
230 Variant36,
231 Variant37,
232 Variant38,
233 Variant39,
234 Variant40,
235 Variant41,
236 Variant42,
237 Variant43,
238 Variant44,
239 Variant45,
240 Variant46,
241 Variant47,
242 Variant48,
243 Variant49,
244 Variant50,
245 Variant51,
246 Variant52,
247 Variant53,
248 Variant54,
249 Variant55,
250 Variant56,
251 Variant57,
252 Variant58,
253 Variant59,
254 Variant60,
255 Variant61,
256 Variant62,
257 Variant63,
258 Variant64,
259 Variant65,
260 Variant66,
261 Variant67,
262 Variant68,
263 Variant69,
264 Variant70,
265 Variant71,
266 Variant72,
267 Variant73,
268 Variant74,
269 Variant75,
270 Variant76,
271 Variant77,
272 Variant78,
273 Variant79,
274 Variant80,
275 Variant81,
276 Variant82,
277 Variant83,
278 Variant84,
279 Variant85,
280 Variant86,
281 Variant87,
282 Variant88,
283 Variant89,
284 Variant90,
285 Variant91,
286 Variant92,
287 Variant93,
288 Variant94,
289 Variant95,
290 Variant96,
291 Variant97,
292 Variant98,
293 Variant99,
294 Variant100,
295 Variant101,
296 Variant102,
297 Variant103,
298 Variant104,
299 Variant105,
300 Variant106,
301 Variant107,
302 Variant108,
303 Variant109,
304 Variant110,
305 Variant111,
306 Variant112,
307 Variant113,
308 Variant114,
309 Variant115,
310 Variant116,
311 Variant117,
312 Variant118,
313 Variant119,
314 Variant120,
315 Variant121,
316 Variant122,
317 Variant123,
318 Variant124,
319 Variant125,
320 Variant126,
321 Variant127,
322 Variant128,
323 Variant129,
324 Variant130,
325 Variant131,
326 Variant132,
327 Variant133,
328 Variant134,
329 Variant135,
330 Variant136,
331 Variant137,
332 Variant138,
333 Variant139,
334 Variant140,
335 Variant141,
336 Variant142,
337 Variant143,
338 Variant144,
339 Variant145,
340 Variant146,
341 Variant147,
342 Variant148,
343 Variant149,
344 Variant150,
345 Variant151,
346 Variant152,
347 Variant153,
348 Variant154,
349 Variant155,
350 Variant156,
351 Variant157,
352 Variant158,
353 Variant159,
354 Variant160,
355 Variant161,
356 Variant162,
357 Variant163,
358 Variant164,
359 Variant165,
360 Variant166,
361 Variant167,
362 Variant168,
363 Variant169,
364 Variant170,
365 Variant171,
366 Variant172,
367 Variant173,
368 Variant174,
369 Variant175,
370 Variant176,
371 Variant177,
372 Variant178,
373 Variant179,
374 Variant180,
375 Variant181,
376 Variant182,
377 Variant183,
378 Variant184,
379 Variant185,
380 Variant186,
381 Variant187,
382 Variant188,
383 Variant189,
384 Variant190,
385 Variant191,
386 Variant192,
387 Variant193,
388 Variant194,
389 Variant195,
390 Variant196,
391 Variant197,
392 Variant198,
393 Variant199,
394 Variant200,
395 Variant201,
396 Variant202,
397 Variant203,
398 Variant204,
399 Variant205,
400 Variant206,
401 Variant207,
402 Variant208,
403 Variant209,
404 Variant210,
405 Variant211,
406 Variant212,
407 Variant213,
408 Variant214,
409 Variant215,
410 Variant216,
411 Variant217,
412 Variant218,
413 Variant219,
414 Variant220,
415 Variant221,
416 Variant222,
417 Variant223,
418 Variant224,
419 Variant225,
420 Variant226,
421 Variant227,
422 Variant228,
423 Variant229,
424 Variant230,
425 Variant231,
426 Variant232,
427 Variant233,
428 Variant234,
429 Variant235,
430 Variant236,
431 Variant237,
432 Variant238,
433 Variant239,
434 Variant240,
435 Variant241,
436 Variant242,
437 Variant243,
438 Variant244,
439 Variant245,
440 Variant246,
441 Variant247,
442 Variant248,
443 Variant249,
444 Variant250,
445 Variant251,
446 Variant252,
447 Variant253,
448 Variant254,
449 Variant255(bool),
450 }
451
452 //
453 // Unaligned errors
454 //
455
456 #[derive(Unaligned)]
457 #[repr(C)]
458 enum Unaligned1 {
459 A,
460 }
461
462 #[derive(Unaligned)]
463 #[repr(u16)]
464 enum Unaligned2 {
465 A,
466 }
467
468 #[derive(Unaligned)]
469 #[repr(i16)]
470 enum Unaligned3 {
471 A,
472 }
473
474 #[derive(Unaligned)]
475 #[repr(u32)]
476 enum Unaligned4 {
477 A,
478 }
479
480 #[derive(Unaligned)]
481 #[repr(i32)]
482 enum Unaligned5 {
483 A,
484 }
485
486 #[derive(Unaligned)]
487 #[repr(u64)]
488 enum Unaligned6 {
489 A,
490 }
491
492 #[derive(Unaligned)]
493 #[repr(i64)]
494 enum Unaligned7 {
495 A,
496 }
497
498 #[derive(Unaligned)]
499 #[repr(usize)]
500 enum Unaligned8 {
501 A,
502 }
503
504 #[derive(Unaligned)]
505 #[repr(isize)]
506 enum Unaligned9 {
507 A,
508 }
509
510 #[derive(Unaligned)]
511 #[repr(u8, align(2))]
512 enum Unaligned10 {
513 A,
514 }
515
516 #[derive(Unaligned)]
517 #[repr(i8, align(2))]
518 enum Unaligned11 {
519 A,
520 }
521
522 #[derive(Unaligned)]
523 #[repr(align(1), align(2))]
524 enum Unaligned12 {
525 A,
526 }
527
528 #[derive(Unaligned)]
529 #[repr(align(2), align(4))]
530 enum Unaligned13 {
531 A,
532 }
533
534 //
535 // IntoBytes errors
536 //
537
538 #[derive(IntoBytes)]
539 #[repr(u8)]
540 enum IntoBytes1 {
541 A,
542 B(u8),
543 }
544
545 #[derive(IntoBytes)]
546 #[repr(C, align(4))]
547 struct Align4IntoBytes(u32);
548
549 #[derive(IntoBytes)]
550 #[repr(u8)]
551 enum IntoBytes2 {
552 A(Align4IntoBytes),
553 }
554
555 #[derive(IntoBytes)]
556 #[repr(u32)]
557 enum IntoBytes3 {
558 A(u32),
559 B(u16),
560 }
561
562 #[derive(IntoBytes)]
563 enum IntoBytes4 {
564 A(u32),
565 B(u16),
566 }
567
568 #[derive(IntoBytes)]
569 enum IntoBytes5 {
570 A(u32),
571 }
572
573 #[derive(IntoBytes)]
574 #[repr(u8)]
575 enum IntoBytes6<T> {
576 A(T),
577 }
578