]> git.lizzy.rs Git - rust.git/blob - src/test/ui/union/union-generic-rpass.rs
Auto merge of #62766 - alexcrichton:stabilize-pipelined-compilation, r=oli-obk
[rust.git] / src / test / ui / union / union-generic-rpass.rs
1 // run-pass
2 #![allow(dead_code)]
3 #![allow(unions_with_drop_fields)]
4
5 #![feature(untagged_unions)]
6
7 union MaybeItem<T: Iterator> {
8     elem: T::Item,
9     none: (),
10 }
11
12 union U<A, B> {
13     a: A,
14     b: B,
15 }
16
17 unsafe fn union_transmute<A, B>(a: A) -> B {
18     U { a: a }.b
19 }
20
21 fn main() {
22     unsafe {
23         let u = U::<String, Vec<u8>> { a: String::from("abcd") };
24
25         assert_eq!(u.b.len(), 4);
26         assert_eq!(u.b[0], b'a');
27
28         let b = union_transmute::<(u8, u8), u16>((1, 1));
29         assert_eq!(b, (1 << 8) + 1);
30
31         let v: Vec<u8> = vec![1, 2, 3];
32         let mut i = v.iter();
33         i.next();
34         let mi = MaybeItem::<std::slice::Iter<_>> { elem: i.next().unwrap() };
35         assert_eq!(*mi.elem, 2);
36     }
37 }