@@ -38,6 +38,12 @@ impl Owner {
3838 } ,
3939 || -> i32 {
4040 return ( * self_. p) ;
41+ } ,
42+ move_from {
43+ self_: Owner :: move_from( { & mut self_ } , ) ,
44+ } ,
45+ destroy = {
46+ Owner :: destructor( & mut self . self_) ;
4147 }
4248 ) ;
4349 }
@@ -57,11 +63,19 @@ unsafe fn main_0() -> i32 {
5763 } ,
5864 || -> i32 {
5965 return ( * h. p) ;
66+ } ,
67+ move_from {
68+ h: Owner :: move_from( { & mut h } , ) ,
69+ } ,
70+ destroy = {
71+ Owner :: destructor( & mut self . h) ;
6072 }
6173 ) ;
74+ let _dtor_f = ScopedDestructorUnsafe :: new ( & raw mut f, |__f| __f. destroy ( ) ) ;
6275 assert ! ( ( o. p) . is_null( ) ) ;
6376 assert ! ( ( ( unsafe { f. call( ) } ) == ( 5 ) ) ) ;
64- let mut g: FnPtr < fn ( ) -> i32 > = f;
77+ let mut g: FnPtr < fn ( ) -> i32 > = f. move_from ( ) ;
78+ let _dtor_g = ScopedDestructorUnsafe :: new ( & raw mut g, |__f| __f. destroy ( ) ) ;
6579 assert ! ( ( ( unsafe { g. call( ) } ) == ( 5 ) ) ) ;
6680 let mut total: i32 = 0 ;
6781 let mut consume: FnPtr < fn ( ) > = lambda_unsafe ! (
@@ -72,14 +86,23 @@ unsafe fn main_0() -> i32 {
7286 || {
7387 ( * total) += ( * h. p) ;
7488 ( * h. p) = 0 ;
89+ } ,
90+ move_from {
91+ h: Owner :: move_from( { & mut h } , ) ,
92+ total: total,
93+ } ,
94+ destroy = {
95+ Owner :: destructor( & mut self . h) ;
7596 }
7697 ) ;
98+ let _dtor_consume = ScopedDestructorUnsafe :: new ( & raw mut consume, |__f| __f. destroy ( ) ) ;
7799 ( unsafe { consume. call ( ) } ) ;
78100 ( unsafe { consume. call ( ) } ) ;
79101 assert ! ( ( ( total) == ( 7 ) ) ) ;
80102 let mut o2: Owner = Owner :: new ( { 9 } ) ;
81103 let _dtor_o2 = ScopedDestructorUnsafe :: new ( & raw mut o2, Owner :: destructor) ;
82104 let mut t: FnPtr < fn ( ) -> i32 > = ( unsafe { Owner :: take ( & mut o2) } ) ;
105+ let _dtor_t = ScopedDestructorUnsafe :: new ( & raw mut t, |__f| __f. destroy ( ) ) ;
83106 assert ! ( ( o2. p) . is_null( ) ) ;
84107 assert ! ( ( ( unsafe { t. call( ) } ) == ( 9 ) ) ) ;
85108 return 0 ;
0 commit comments