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 
main()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 }
47