]> git.proxmox.com Git - rustc.git/blob - src/test/ui/repr_c_int_align.rs
New upstream version 1.66.0+dfsg1
[rustc.git] / src / test / ui / repr_c_int_align.rs
1 // run-pass
2 // compile-flags: -O
3
4 #![allow(dead_code)]
5
6 #[repr(C, u8)]
7 enum ReprCu8 {
8 A(u16),
9 B,
10 }
11
12 #[repr(u8)]
13 enum Repru8 {
14 A(u16),
15 B,
16 }
17
18 #[repr(C)]
19 struct ReprC {
20 tag: u8,
21 padding: u8,
22 payload: u16,
23 }
24
25 fn main() {
26 // Test `repr(C, u8)`.
27 let r1 = ReprC { tag: 0, padding: 0, payload: 0 };
28 let r2 = ReprC { tag: 0, padding: 1, payload: 1 };
29
30 let t1: &ReprCu8 = unsafe { std::mem::transmute(&r1) };
31 let t2: &ReprCu8 = unsafe { std::mem::transmute(&r2) };
32
33 match (t1, t2) {
34 (ReprCu8::A(_), ReprCu8::A(_)) => (),
35 _ => assert!(false)
36 };
37
38 // Test `repr(u8)`.
39 let t1: &Repru8 = unsafe { std::mem::transmute(&r1) };
40 let t2: &Repru8 = unsafe { std::mem::transmute(&r2) };
41
42 match (t1, t2) {
43 (Repru8::A(_), Repru8::A(_)) => (),
44 _ => assert!(false)
45 };
46 }