34 lines
658 B
Rust
34 lines
658 B
Rust
// run-pass
|
|
#![allow(unused_variables)]
|
|
struct Foo<'r>(&'r mut i32);
|
|
|
|
impl<'r> Drop for Foo<'r> {
|
|
fn drop(&mut self) {
|
|
*self.0 += 1;
|
|
}
|
|
}
|
|
|
|
trait Trait {}
|
|
impl<'r> Trait for Foo<'r> {}
|
|
|
|
struct Holder<T: ?Sized>(T);
|
|
|
|
fn main() {
|
|
let mut drops = 0;
|
|
|
|
{
|
|
let y = &Holder([Foo(&mut drops)]) as &Holder<[Foo]>;
|
|
// this used to cause an extra drop of the Foo instance
|
|
let x = &y.0;
|
|
}
|
|
assert_eq!(1, drops);
|
|
|
|
drops = 0;
|
|
{
|
|
let y = &Holder(Foo(&mut drops)) as &Holder<dyn Trait>;
|
|
// this used to cause an extra drop of the Foo instance
|
|
let x = &y.0;
|
|
}
|
|
assert_eq!(1, drops);
|
|
}
|