]> git.lizzy.rs Git - rust.git/blob - src/test/ui/dst/dst-bad-assign-2.rs
Rollup merge of #100479 - compiler-errors:argument-type-error-improvements, r=lcnr
[rust.git] / src / test / ui / dst / dst-bad-assign-2.rs
1 // Forbid assignment into a dynamically sized type.
2
3 struct Fat<T: ?Sized> {
4     f1: isize,
5     f2: &'static str,
6     ptr: T
7 }
8
9 #[derive(PartialEq,Eq)]
10 struct Bar;
11
12 #[derive(PartialEq,Eq)]
13 struct Bar1 {
14     f: isize
15 }
16
17 trait ToBar {
18     fn to_bar(&self) -> Bar;
19     fn to_val(&self) -> isize;
20 }
21
22 impl ToBar for Bar1 {
23     fn to_bar(&self) -> Bar {
24         Bar
25     }
26     fn to_val(&self) -> isize {
27         self.f
28     }
29 }
30
31 pub fn main() {
32     // Assignment.
33     let f5: &mut Fat<dyn ToBar> = &mut Fat { f1: 5, f2: "some str", ptr: Bar1 {f :42} };
34     let z: Box<dyn ToBar> = Box::new(Bar1 {f: 36});
35     f5.ptr = *z;
36     //~^ ERROR the size for values of type
37
38 }