2 // Test structs with always-unsized fields.
6 #![feature(box_syntax, unsize, raw)]
27 fn foo(&self) -> usize;
35 fn foo(&self) -> usize {
53 let _ = mem::size_of::<Box<Foo<u8>>>();
54 let _ = mem::size_of::<Box<Bar>>();
55 let _ = mem::size_of::<Box<Baz>>();
62 let data: Box<Foo_<i32>> = box Foo_{f: [1, 2, 3] };
63 let x: &Foo<i32> = mem::transmute(slice::from_raw_parts(&*data, 3));
64 assert_eq!(x.f.len(), 3);
65 assert_eq!(x.f[0], 1);
72 let data: Box<_> = box Baz_ {
73 f1: 42, f2: ['a' as u8, 'b' as u8, 'c' as u8, 'd' as u8, 'e' as u8] };
74 let x: &Baz = mem::transmute(slice::from_raw_parts(&*data, 5));
76 let chs: Vec<char> = x.f2.chars().collect();
77 assert_eq!(chs.len(), 5);
78 assert_eq!(chs[0], 'a');
79 assert_eq!(chs[1], 'b');
80 assert_eq!(chs[2], 'c');
81 assert_eq!(chs[3], 'd');
82 assert_eq!(chs[4], 'e');
88 let obj: Box<St> = box St { f: 42 };
90 let obj: raw::TraitObject = mem::transmute(&*obj);
91 let data: Box<_> = box Qux_{ f: St { f: 234 } };
92 let x: &Qux = mem::transmute(raw::TraitObject { vtable: obj.vtable,
93 data: mem::transmute(&*data) });
94 assert_eq!(x.f.foo(), 234);