- 
                Notifications
    You must be signed in to change notification settings 
- Fork 13.9k
Closed
Labels
E-needs-testCall for participation: An issue has been fixed and does not reproduce, but no test has been added.Call for participation: An issue has been fixed and does not reproduce, but no test has been added.
Description
I'm not sure if this is a duplicate of an existing issue, there are many destructor related issues open already. But anyways, here it is:
#[feature(managed_boxes)];
struct DroppableStruct { a: int }
impl Drop for DroppableStruct {
    fn drop(&mut self) {
        println!("Dropping");
    }
}
trait MyTrait { }
impl MyTrait for DroppableStruct {}
struct Whatever<'a> { w: &'a MyTrait }
impl <'a> Whatever<'a> {
    fn new<'b>(w: &'b MyTrait) -> Whatever<'b> {
        Whatever { w: w }
    }
}
fn main() {
    let mut f = DroppableStruct;
    let _a = Whatever::new(@f as @MyTrait);
}This doesn't run the destructor of DroppableStruct. This is pretty much as minimal as I could get the example, many changes make it work. E.g. changing the main function body to:
    let f = DroppableStruct { a: 1 };
    let b = @f as @MyTrait;
    let _a = Whatever::new(b);makes the destructor work. Also, not saving the Whatever struct in a variable makes it work. Also, not saving the @MyTrait in Whatever makes it work. Good luck.
Update: removed mut, was not relevant.
Update2: added a field to the struct to show it's not an issue about zero-sized structs.
Metadata
Metadata
Assignees
Labels
E-needs-testCall for participation: An issue has been fixed and does not reproduce, but no test has been added.Call for participation: An issue has been fixed and does not reproduce, but no test has been added.