@@ -10,10 +10,30 @@ pub fn unused_param_0(x: i32) {
1010 let x: Value < i32 > = Rc :: new ( RefCell :: new ( x) ) ;
1111 ( * x. borrow_mut ( ) ) ;
1212}
13+ #[ derive( Default ) ]
14+ pub struct NonTrivial {
15+ pub data : Value < Vec < i32 > > ,
16+ }
17+ impl Clone for NonTrivial {
18+ fn clone ( & self ) -> Self {
19+ let mut this = Self {
20+ data : Rc :: new ( RefCell :: new ( ( * self . data . borrow ( ) ) . clone ( ) ) ) ,
21+ } ;
22+ this
23+ }
24+ }
25+ impl ByteRepr for NonTrivial { }
26+ pub fn unused_ref_param_1 ( x : Ptr < NonTrivial > ) {
27+ ( * x. upgrade ( ) . deref ( ) ) . clone ( ) ;
28+ }
29+ pub fn unused_ptr_param_2 ( p : Ptr < NonTrivial > ) {
30+ let p: Value < Ptr < NonTrivial > > = Rc :: new ( RefCell :: new ( p) ) ;
31+ ( * ( * p. borrow ( ) ) . upgrade ( ) . deref ( ) ) . clone ( ) ;
32+ }
1333thread_local ! (
1434 pub static side_effect_counter: Value <i32 > = Rc :: new( RefCell :: new( 0 ) ) ;
1535) ;
16- pub fn bump_and_return_1 ( ) -> i32 {
36+ pub fn bump_and_return_3 ( ) -> i32 {
1737 ( * side_effect_counter. with ( Value :: clone) . borrow_mut ( ) ) . prefix_inc ( ) ;
1838 return ( * side_effect_counter. with ( Value :: clone) . borrow ( ) ) ;
1939}
@@ -53,10 +73,10 @@ fn main_0() -> i32 {
5373 } ) ) ;
5474 assert ! ( ( ( * w. borrow( ) ) == 3 ) ) ;
5575 assert ! ( ( ( * counter. borrow( ) ) == 3 ) ) ;
56- ( { bump_and_return_1 ( ) } ) ;
76+ ( { bump_and_return_3 ( ) } ) ;
5777 assert ! ( ( ( * side_effect_counter. with( Value :: clone) . borrow( ) ) == 1 ) ) ;
5878 let v: Value < i32 > = Rc :: new ( RefCell :: new ( {
59- ( { bump_and_return_1 ( ) } ) ;
79+ ( { bump_and_return_3 ( ) } ) ;
6080 99
6181 } ) ) ;
6282 assert ! ( ( ( * side_effect_counter. with( Value :: clone) . borrow( ) ) == 2 ) ) ;
@@ -75,11 +95,11 @@ fn main_0() -> i32 {
7595 } ) ) ;
7696 assert ! ( ( ( * err. borrow( ) ) == 7 ) ) ;
7797 assert ! ( ( ( * chosen. borrow( ) ) == 123 ) ) ;
78- bump_and_return_1 ;
98+ bump_and_return_3 ;
7999 assert ! ( ( ( * side_effect_counter. with( Value :: clone) . borrow( ) ) == 2 ) ) ;
80- ( FnPtr :: < fn ( ) -> i32 > :: new ( bump_and_return_1 ) ) ;
100+ ( FnPtr :: < fn ( ) -> i32 > :: new ( bump_and_return_3 ) ) ;
81101 assert ! ( ( ( * side_effect_counter. with( Value :: clone) . borrow( ) ) == 2 ) ) ;
82- ( ( FnPtr :: < fn ( ) -> i32 > :: new ( bump_and_return_1 ) ) . cast :: < fn ( ) -> i32 > ( None ) ) ;
102+ ( ( FnPtr :: < fn ( ) -> i32 > :: new ( bump_and_return_3 ) ) . cast :: < fn ( ) -> i32 > ( None ) ) ;
83103 assert ! ( ( ( * side_effect_counter. with( Value :: clone) . borrow( ) ) == 2 ) ) ;
84104 let storage: Value < i32 > = Rc :: new ( RefCell :: new ( 11 ) ) ;
85105 let p: Value < Ptr < i32 > > = Rc :: new ( RefCell :: new ( ( storage. as_pointer ( ) ) ) ) ;
@@ -93,5 +113,14 @@ fn main_0() -> i32 {
93113 ( * ( * h. borrow ( ) ) . field . borrow_mut ( ) ) ;
94114 let hp: Value < Ptr < Holder > > = Rc :: new ( RefCell :: new ( ( h. as_pointer ( ) ) ) ) ;
95115 ( * ( * ( * hp. borrow ( ) ) . upgrade ( ) . deref ( ) ) . field . borrow_mut ( ) ) ;
116+ let nt: Value < NonTrivial > = Rc :: new ( RefCell :: new ( <NonTrivial >:: default ( ) ) ) ;
117+ ( {
118+ let _x: Ptr < NonTrivial > = nt. as_pointer ( ) ;
119+ unused_ref_param_1 ( _x)
120+ } ) ;
121+ ( {
122+ let _p: Ptr < NonTrivial > = ( nt. as_pointer ( ) ) ;
123+ unused_ptr_param_2 ( _p)
124+ } ) ;
96125 return 0 ;
97126}
0 commit comments