]> git.lizzy.rs Git - rust.git/blob - src/test/ui/issues/issue-10802.rs
Auto merge of #100237 - cjgillot:no-special-hash-hir, r=nagisa
[rust.git] / src / test / ui / issues / issue-10802.rs
1 // run-pass
2 #![allow(dead_code)]
3
4 struct DroppableStruct;
5 enum DroppableEnum {
6     DroppableVariant1, DroppableVariant2
7 }
8
9 static mut DROPPED: bool = false;
10
11 impl Drop for DroppableStruct {
12     fn drop(&mut self) {
13         unsafe { DROPPED = true; }
14     }
15 }
16 impl Drop for DroppableEnum {
17     fn drop(&mut self) {
18         unsafe { DROPPED = true; }
19     }
20 }
21
22 trait MyTrait { fn dummy(&self) { } }
23 impl MyTrait for Box<DroppableStruct> {}
24 impl MyTrait for Box<DroppableEnum> {}
25
26 struct Whatever { w: Box<dyn MyTrait+'static> }
27 impl  Whatever {
28     fn new(w: Box<dyn MyTrait+'static>) -> Whatever {
29         Whatever { w: w }
30     }
31 }
32
33 fn main() {
34     {
35         let f: Box<_> = Box::new(DroppableStruct);
36         let _a = Whatever::new(Box::new(f) as Box<dyn MyTrait>);
37     }
38     assert!(unsafe { DROPPED });
39     unsafe { DROPPED = false; }
40     {
41         let f: Box<_> = Box::new(DroppableEnum::DroppableVariant1);
42         let _a = Whatever::new(Box::new(f) as Box<dyn MyTrait>);
43     }
44     assert!(unsafe { DROPPED });
45 }