2 // revisions: mirunsafeck thirunsafeck
3 // [thirunsafeck]compile-flags: -Z thir-unsafeck
7 struct Pair<T, U>(T, U);
10 struct Triple<T>(T, T, T);
30 #[cfg(target_endian = "little")]
32 let mut u = U::<u8, u16> { b: 0xDE_DE };
34 assert_eq!(u.b, 0xDE_BE);
36 let mut u = U::<u16, u32> { b: 0xDEAD_DEAD };
38 assert_eq!(u.b, 0xDEAD_BEEF);
40 let mut u = U::<u32, u64> { b: 0xDEADBEEF_DEADBEEF };
42 assert_eq!(u.b, 0xDEADBEEF_BAADF00D);
44 let mut w = W::<Pair<Triple<u8>, u8>, u32> { b: 0xDEAD_DEAD };
45 w.a.0 = Triple(0, 0, 0);
46 assert_eq!(w.b, 0xDE00_0000);
48 let mut w = W::<Pair<u8, Triple<u8>>, u32> { b: 0xDEAD_DEAD };
49 w.a.1 = Triple(0, 0, 0);
50 assert_eq!(w.b, 0x0000_00AD);
53 #[cfg(target_endian = "big")]
55 let mut u = U::<u8, u16> { b: 0xDE_DE };
57 assert_eq!(u.b, 0xBE_DE);
59 let mut u = U::<u16, u32> { b: 0xDEAD_DEAD };
61 assert_eq!(u.b, 0xBEEF_DEAD);
63 let mut u = U::<u32, u64> { b: 0xDEADBEEF_DEADBEEF };
65 assert_eq!(u.b, 0xBAADF00D_DEADBEEF);
67 let mut w = W::<Pair<Triple<u8>, u8>, u32> { b: 0xDEAD_DEAD };
68 w.a.0 = Triple(0, 0, 0);
69 assert_eq!(w.b, 0x0000_00AD);
71 let mut w = W::<Pair<u8, Triple<u8>>, u32> { b: 0xDEAD_DEAD };
72 w.a.1 = Triple(0, 0, 0);
73 assert_eq!(w.b, 0xDE00_0000);