• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 // See comment in `include.rs` for why we disable the prelude.
10 #![no_implicit_prelude]
11 #![allow(warnings)]
12 
13 include!("include.rs");
14 
15 // An enum is `IntoBytes` if if has a defined repr.
16 
17 #[derive(imp::IntoBytes)]
18 #[repr(C)]
19 enum C {
20     A,
21 }
22 
23 util_assert_impl_all!(C: imp::IntoBytes);
24 
25 #[derive(imp::IntoBytes)]
26 #[repr(u8)]
27 enum U8 {
28     A,
29 }
30 
31 util_assert_impl_all!(U8: imp::IntoBytes);
32 
33 #[derive(imp::IntoBytes)]
34 #[repr(u16)]
35 enum U16 {
36     A,
37 }
38 
39 util_assert_impl_all!(U16: imp::IntoBytes);
40 
41 #[derive(imp::IntoBytes)]
42 #[repr(u32)]
43 enum U32 {
44     A,
45 }
46 
47 util_assert_impl_all!(U32: imp::IntoBytes);
48 
49 #[derive(imp::IntoBytes)]
50 #[repr(u64)]
51 enum U64 {
52     A,
53 }
54 
55 util_assert_impl_all!(U64: imp::IntoBytes);
56 
57 #[derive(imp::IntoBytes)]
58 #[repr(usize)]
59 enum Usize {
60     A,
61 }
62 
63 util_assert_impl_all!(Usize: imp::IntoBytes);
64 
65 #[derive(imp::IntoBytes)]
66 #[repr(i8)]
67 enum I8 {
68     A,
69 }
70 
71 util_assert_impl_all!(I8: imp::IntoBytes);
72 
73 #[derive(imp::IntoBytes)]
74 #[repr(i16)]
75 enum I16 {
76     A,
77 }
78 
79 util_assert_impl_all!(I16: imp::IntoBytes);
80 
81 #[derive(imp::IntoBytes)]
82 #[repr(i32)]
83 enum I32 {
84     A,
85 }
86 
87 util_assert_impl_all!(I32: imp::IntoBytes);
88 
89 #[derive(imp::IntoBytes)]
90 #[repr(i64)]
91 enum I64 {
92     A,
93 }
94 
95 util_assert_impl_all!(I64: imp::IntoBytes);
96 
97 #[derive(imp::IntoBytes)]
98 #[repr(isize)]
99 enum Isize {
100     A,
101 }
102 
103 util_assert_impl_all!(Isize: imp::IntoBytes);
104 
105 #[derive(imp::IntoBytes)]
106 #[repr(u8)]
107 enum HasData {
108     A(u8),
109     B(i8),
110 }
111 
112 util_assert_impl_all!(HasData: imp::IntoBytes);
113 
114 #[derive(imp::IntoBytes)]
115 #[repr(u32)]
116 enum HasData32 {
117     A(u32),
118     B(i32),
119     C([u8; 4]),
120     D([u16; 2]),
121 }
122 
123 util_assert_impl_all!(HasData: imp::IntoBytes);
124 
125 // After #1752 landed but before #1758 was fixed, this failed to compile because
126 // the padding check treated the tag type as being `#[repr(u8, align(2))] struct
127 // Tag { A }`, which is two bytes long, rather than the correct `#[repr(u8)]
128 // struct Tag { A }`, which is one byte long.
129 #[derive(imp::IntoBytes)]
130 #[repr(u8, align(2))]
131 enum BadTagWouldHavePadding {
132     A(u8, u16),
133 }
134