]> git.proxmox.com Git - rustc.git/blame - src/test/ui/union/union-generic-rpass.rs
New upstream version 1.39.0+dfsg1
[rustc.git] / src / test / ui / union / union-generic-rpass.rs
CommitLineData
b7449926 1// run-pass
0bf4aa26 2#![allow(dead_code)]
b7449926
XL
3#![allow(unions_with_drop_fields)]
4
9e0c209e
SL
5#![feature(untagged_unions)]
6
7union MaybeItem<T: Iterator> {
8 elem: T::Item,
9 none: (),
10}
11
12union U<A, B> {
13 a: A,
14 b: B,
15}
16
17unsafe fn union_transmute<A, B>(a: A) -> B {
18 U { a: a }.b
19}
20
21fn 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}