@@ -61,23 +61,36 @@ pub struct Counter {
6161 pub calls : i32 ,
6262}
6363impl Counter {
64- pub unsafe fn Get ( & mut self ) -> i32 {
65- self . calls . prefix_inc ( ) ;
64+ pub unsafe fn Get ( & self ) -> i32 {
65+ ( * ( & raw const self . calls ) . cast_mut ( ) ) . prefix_inc ( ) ;
6666 return self . v ;
6767 }
68- pub unsafe fn operator_eq ( & mut self , o : * const Counter ) -> bool {
69- self . calls . prefix_inc ( ) ;
68+ pub unsafe fn operator_eq ( & self , o : * const Counter ) -> bool {
69+ ( * ( & raw const self . calls ) . cast_mut ( ) ) . prefix_inc ( ) ;
7070 return ( ( self . v ) == ( ( * o) . v ) ) ;
7171 }
7272}
7373impl std:: cmp:: PartialEq for Counter {
7474 fn eq ( & self , other : & Self ) -> bool {
75- unsafe {
76- Counter :: operator_eq ( & mut * ( & raw const * self ) . cast_mut ( ) , other as * const Counter )
77- }
75+ unsafe { Counter :: operator_eq ( self , other as * const Counter ) }
7876 }
7977}
8078impl std:: cmp:: Eq for Counter { }
79+ #[ repr( C ) ]
80+ #[ derive( Copy , Clone , VaArg , FnPtrArg , Default ) ]
81+ pub struct Tally {
82+ pub calls : i32 ,
83+ }
84+ impl Tally {
85+ pub unsafe fn SameNameBetweenConstAndNonConst_1 ( & mut self ) -> i32 {
86+ self . calls += 1 ;
87+ return 1 ;
88+ }
89+ pub unsafe fn SameNameBetweenConstAndNonConst_2 ( & self ) -> i32 {
90+ ( * ( & raw const self . calls ) . cast_mut ( ) ) += 10 ;
91+ return 2 ;
92+ }
93+ }
8194pub unsafe fn RandomRoute_0 ( route : * mut Route ) -> i32 {
8295 if ( ( ( ( * route) . path . first ) % ( 2 ) ) != 0 ) {
8396 return ( unsafe {
@@ -128,13 +141,21 @@ unsafe fn main_0() -> i32 {
128141 let mut c1: Counter = Counter { v : 3 , calls : 0 } ;
129142 let c2: Counter = Counter { v : 3 , calls : 0 } ;
130143 let mut pc: * const Counter = ( & mut c1 as * mut Counter ) . cast_const ( ) ;
131- assert ! ( ( ( unsafe { Counter :: Get ( & mut * ( & raw const c1 ) . cast_mut ( ) , ) } ) == ( 3 ) ) ) ;
132- assert ! ( ( ( unsafe { Counter :: Get ( & mut * ( & raw const c2 ) . cast_mut ( ) , ) } ) == ( 3 ) ) ) ;
133- assert ! ( ( ( unsafe { Counter :: Get ( & mut * ( & raw const ( * pc) ) . cast_mut ( ) , ) } ) == ( 3 ) ) ) ;
134- assert ! ( ( unsafe { Counter :: operator_eq( & mut * ( & raw const c1 ) . cast_mut ( ) , & c2, ) } ) ) ;
135- assert ! ( ( unsafe { Counter :: operator_eq( & mut * ( & raw const c2 ) . cast_mut ( ) , & c1, ) } ) ) ;
144+ assert ! ( ( ( unsafe { Counter :: Get ( & c1 , ) } ) == ( 3 ) ) ) ;
145+ assert ! ( ( ( unsafe { Counter :: Get ( & c2 , ) } ) == ( 3 ) ) ) ;
146+ assert ! ( ( ( unsafe { Counter :: Get ( & ( * pc) , ) } ) == ( 3 ) ) ) ;
147+ assert ! ( ( unsafe { Counter :: operator_eq( & c1 , & c2, ) } ) ) ;
148+ assert ! ( ( unsafe { Counter :: operator_eq( & c2 , & c1, ) } ) ) ;
136149 assert ! ( ( ( c1. calls) == ( 3 ) ) ) ;
137150 assert ! ( ( ( c2. calls) == ( 2 ) ) ) ;
151+ let mut t: Tally = Tally { calls : 0 } ;
152+ let ct: Tally = Tally { calls : 0 } ;
153+ let rt: * const Tally = & t;
154+ assert ! ( ( ( unsafe { Tally :: SameNameBetweenConstAndNonConst_1 ( & mut t, ) } ) == ( 1 ) ) ) ;
155+ assert ! ( ( ( unsafe { Tally :: SameNameBetweenConstAndNonConst_2 ( & ct, ) } ) == ( 2 ) ) ) ;
156+ assert ! ( ( ( unsafe { Tally :: SameNameBetweenConstAndNonConst_2 ( & ( * rt) , ) } ) == ( 2 ) ) ) ;
157+ assert ! ( ( ( t. calls) == ( 11 ) ) ) ;
158+ assert ! ( ( ( ct. calls) == ( 10 ) ) ) ;
138159 return 0 ;
139160}
140161pub unsafe fn __cpp2rust_init_globals ( ) { }
0 commit comments