@@ -31,8 +31,8 @@ impl<'c> Translation<'c> {
3131 rotate_method_name : & ' static str ,
3232 ) -> TranslationResult < WithStmts < Box < Expr > > > {
3333 // Emit `arg0.{method_name}(arg1)`
34- let arg0 = self . convert_expr ( ctx. used ( ) , args[ 0 ] , None ) ?;
35- let arg1 = self . convert_expr ( ctx. used ( ) , args[ 1 ] , None ) ?;
34+ let arg0 = self . convert_expr ( ctx. used ( ) , args[ 0 ] ) ?;
35+ let arg1 = self . convert_expr ( ctx. used ( ) , args[ 1 ] ) ?;
3636 arg0. and_then ( |arg0| {
3737 arg1. and_then ( |arg1| {
3838 let arg1 = mk ( ) . cast_expr ( arg1, mk ( ) . path_ty ( vec ! [ "u32" ] ) ) ;
@@ -116,15 +116,15 @@ impl<'c> Translation<'c> {
116116 "__builtin_signbit" | "__builtin_signbitf" | "__builtin_signbitl" => {
117117 self . import_num_traits ( args[ 0 ] ) ?;
118118
119- let val = self . convert_expr ( ctx. used ( ) , args[ 0 ] , None ) ?;
119+ let val = self . convert_expr ( ctx. used ( ) , args[ 0 ] ) ?;
120120 Ok ( val. map ( |v| {
121121 let val = mk ( ) . method_call_expr ( v, "is_sign_negative" , vec ! [ ] ) ;
122122
123123 mk ( ) . cast_expr ( val, mk ( ) . abs_path_ty ( vec ! [ "core" , "ffi" , "c_int" ] ) )
124124 } ) )
125125 }
126126 "__builtin_ffs" | "__builtin_ffsl" | "__builtin_ffsll" => {
127- let val = self . convert_expr ( ctx. used ( ) , args[ 0 ] , None ) ?;
127+ let val = self . convert_expr ( ctx. used ( ) , args[ 0 ] ) ?;
128128
129129 Ok ( val. map ( |x| {
130130 let add = BinOp :: Add ( Default :: default ( ) ) ;
@@ -141,33 +141,33 @@ impl<'c> Translation<'c> {
141141 } ) )
142142 }
143143 "__builtin_clz" | "__builtin_clzl" | "__builtin_clzll" => {
144- let val = self . convert_expr ( ctx. used ( ) , args[ 0 ] , None ) ?;
144+ let val = self . convert_expr ( ctx. used ( ) , args[ 0 ] ) ?;
145145 Ok ( val. map ( |x| {
146146 let zeros = mk ( ) . method_call_expr ( x, "leading_zeros" , vec ! [ ] ) ;
147147 mk ( ) . cast_expr ( zeros, mk ( ) . path_ty ( vec ! [ "i32" ] ) )
148148 } ) )
149149 }
150150 "__builtin_ctz" | "__builtin_ctzl" | "__builtin_ctzll" => {
151- let val = self . convert_expr ( ctx. used ( ) , args[ 0 ] , None ) ?;
151+ let val = self . convert_expr ( ctx. used ( ) , args[ 0 ] ) ?;
152152 Ok ( val. map ( |x| {
153153 let zeros = mk ( ) . method_call_expr ( x, "trailing_zeros" , vec ! [ ] ) ;
154154 mk ( ) . cast_expr ( zeros, mk ( ) . path_ty ( vec ! [ "i32" ] ) )
155155 } ) )
156156 }
157157 "__builtin_bswap16" | "__builtin_bswap32" | "__builtin_bswap64" => {
158- let val = self . convert_expr ( ctx. used ( ) , args[ 0 ] , None ) ?;
158+ let val = self . convert_expr ( ctx. used ( ) , args[ 0 ] ) ?;
159159 Ok ( val. map ( |x| mk ( ) . method_call_expr ( x, "swap_bytes" , vec ! [ ] ) ) )
160160 }
161161 "__builtin_fabs" | "__builtin_fabsf" | "__builtin_fabsl" => {
162162 self . import_num_traits ( args[ 0 ] ) ?;
163163
164- let val = self . convert_expr ( ctx. used ( ) , args[ 0 ] , None ) ?;
164+ let val = self . convert_expr ( ctx. used ( ) , args[ 0 ] ) ?;
165165 Ok ( val. map ( |x| mk ( ) . method_call_expr ( x, "abs" , vec ! [ ] ) ) )
166166 }
167167 "__builtin_isfinite" | "__builtin_isnan" => {
168168 self . import_num_traits ( args[ 0 ] ) ?;
169169
170- let val = self . convert_expr ( ctx. used ( ) , args[ 0 ] , None ) ?;
170+ let val = self . convert_expr ( ctx. used ( ) , args[ 0 ] ) ?;
171171
172172 let seg = match builtin_name {
173173 "__builtin_isfinite" => "is_finite" ,
@@ -183,7 +183,7 @@ impl<'c> Translation<'c> {
183183 self . import_num_traits ( args[ 0 ] ) ?;
184184
185185 // isinf_sign(x) -> fabs(x) == infinity ? (signbit(x) ? -1 : 1) : 0
186- let val = self . convert_expr ( ctx. used ( ) , args[ 0 ] , None ) ?;
186+ let val = self . convert_expr ( ctx. used ( ) , args[ 0 ] ) ?;
187187 Ok ( val. map ( |x| {
188188 let inner_cond = mk ( ) . method_call_expr ( x. clone ( ) , "is_sign_positive" , vec ! [ ] ) ;
189189 let one = mk ( ) . lit_expr ( mk ( ) . int_lit ( 1 , "" ) ) ;
@@ -202,18 +202,18 @@ impl<'c> Translation<'c> {
202202 // https://github.com/llvm-mirror/llvm/blob/master/lib/CodeGen/IntrinsicLowering.cpp#L470
203203 Ok ( WithStmts :: new_val ( mk ( ) . lit_expr ( mk ( ) . int_lit ( 1 , "i32" ) ) ) )
204204 }
205- "__builtin_expect" => self . convert_expr ( ctx. used ( ) , args[ 0 ] , None ) ,
205+ "__builtin_expect" => self . convert_expr ( ctx. used ( ) , args[ 0 ] ) ,
206206
207207 "__builtin_popcount" | "__builtin_popcountl" | "__builtin_popcountll" => {
208- let val = self . convert_expr ( ctx. used ( ) , args[ 0 ] , None ) ?;
208+ let val = self . convert_expr ( ctx. used ( ) , args[ 0 ] ) ?;
209209 Ok ( val. map ( |x| {
210210 let zeros = mk ( ) . method_call_expr ( x, "count_ones" , vec ! [ ] ) ;
211211 mk ( ) . cast_expr ( zeros, mk ( ) . path_ty ( vec ! [ "i32" ] ) )
212212 } ) )
213213 }
214214 "__builtin_bzero" => {
215- let ptr_stmts = self . convert_expr ( ctx. used ( ) , args[ 0 ] , None ) ?;
216- let n_stmts = self . convert_expr ( ctx. used ( ) , args[ 1 ] , None ) ?;
215+ let ptr_stmts = self . convert_expr ( ctx. used ( ) , args[ 0 ] ) ?;
216+ let n_stmts = self . convert_expr ( ctx. used ( ) , args[ 1 ] ) ?;
217217 let write_bytes = mk ( ) . abs_path_expr ( vec ! [ "core" , "ptr" , "write_bytes" ] ) ;
218218 let zero = mk ( ) . lit_expr ( mk ( ) . int_lit ( 0 , "u8" ) ) ;
219219 ptr_stmts. and_then ( |ptr| {
@@ -224,7 +224,7 @@ impl<'c> Translation<'c> {
224224 // If the target does not support data prefetch, the address expression is evaluated if
225225 // it includes side effects but no other code is generated and GCC does not issue a warning.
226226 // void __builtin_prefetch (const void *addr, ...);
227- "__builtin_prefetch" => self . convert_expr ( ctx. unused ( ) , args[ 0 ] , None ) ,
227+ "__builtin_prefetch" => self . convert_expr ( ctx. unused ( ) , args[ 0 ] ) ,
228228
229229 "__builtin_memcpy" | "__builtin_memcmp" | "__builtin_memmove" | "__builtin_strncmp"
230230 | "__builtin_strncpy" | "__builtin_strncat" => self . convert_libc_fns (
@@ -302,8 +302,8 @@ impl<'c> Translation<'c> {
302302 // We can't convert this to Rust, but it should be safe to always return -1/0
303303 // (depending on the value of `type`), so we emit the following:
304304 // `(if (type & 2) == 0 { -1isize } else { 0isize }) as libc::size_t`
305- let ptr_arg = self . convert_expr ( ctx. unused ( ) , args[ 0 ] , None ) ?;
306- let type_arg = self . convert_expr ( ctx. used ( ) , args[ 1 ] , None ) ?;
305+ let ptr_arg = self . convert_expr ( ctx. unused ( ) , args[ 0 ] ) ?;
306+ let type_arg = self . convert_expr ( ctx. used ( ) , args[ 1 ] ) ?;
307307 ptr_arg. and_then ( |_| {
308308 Ok ( type_arg. map ( |type_arg| {
309309 let type_and_2 = mk ( ) . binary_expr (
@@ -333,7 +333,7 @@ impl<'c> Translation<'c> {
333333 if ctx. is_unused ( ) && args. len ( ) == 2 {
334334 if let Some ( va_id) = self . match_vastart ( args[ 0 ] ) {
335335 if self . ast_context . get_decl ( & va_id) . is_some ( ) {
336- let dst = self . convert_expr ( ctx. used ( ) , args[ 0 ] , None ) ?;
336+ let dst = self . convert_expr ( ctx. used ( ) , args[ 0 ] ) ?;
337337 let fn_ctx = self . function_context . borrow ( ) ;
338338 let src = fn_ctx. get_va_list_arg_name ( ) ;
339339
@@ -354,8 +354,8 @@ impl<'c> Translation<'c> {
354354 "__builtin_va_copy" => {
355355 if ctx. is_unused ( ) && args. len ( ) == 2 {
356356 if let Some ( ( _dst_va_id, _src_va_id) ) = self . match_vacopy ( args[ 0 ] , args[ 1 ] ) {
357- let dst = self . convert_expr ( ctx. used ( ) , args[ 0 ] , None ) ?;
358- let src = self . convert_expr ( ctx. used ( ) , args[ 1 ] , None ) ?;
357+ let dst = self . convert_expr ( ctx. used ( ) , args[ 0 ] ) ?;
358+ let src = self . convert_expr ( ctx. used ( ) , args[ 1 ] ) ?;
359359
360360 let call_expr = mk ( ) . method_call_expr ( src. to_expr ( ) , "clone" , vec ! [ ] ) ;
361361 let assign_expr = mk ( ) . assign_expr ( dst. to_expr ( ) , call_expr) ;
@@ -380,7 +380,7 @@ impl<'c> Translation<'c> {
380380 }
381381
382382 "__builtin_alloca" => {
383- let count = self . convert_expr ( ctx. used ( ) , args[ 0 ] , None ) ?;
383+ let count = self . convert_expr ( ctx. used ( ) , args[ 0 ] ) ?;
384384 count. and_then ( |count| {
385385 // Get `alloca` allocation storage.
386386 let mut fn_ctx = self . function_context . borrow_mut ( ) ;
@@ -459,9 +459,9 @@ impl<'c> Translation<'c> {
459459 | "__sync_bool_compare_and_swap_4"
460460 | "__sync_bool_compare_and_swap_8"
461461 | "__sync_bool_compare_and_swap_16" => {
462- let arg0 = self . convert_expr ( ctx. used ( ) , args[ 0 ] , None ) ?;
463- let arg1 = self . convert_expr ( ctx. used ( ) , args[ 1 ] , None ) ?;
464- let arg2 = self . convert_expr ( ctx. used ( ) , args[ 2 ] , None ) ?;
462+ let arg0 = self . convert_expr ( ctx. used ( ) , args[ 0 ] ) ?;
463+ let arg1 = self . convert_expr ( ctx. used ( ) , args[ 1 ] ) ?;
464+ let arg2 = self . convert_expr ( ctx. used ( ) , args[ 2 ] ) ?;
465465 arg0. and_then ( |arg0| {
466466 arg1. and_then ( |arg1| {
467467 arg2. and_then ( |arg2| {
@@ -498,8 +498,8 @@ impl<'c> Translation<'c> {
498498 | "__sync_lock_test_and_set_16" => {
499499 // Emit `atomic_xchg_acquire(arg0, arg1)`
500500 let atomic_func = self . atomic_intrinsic_expr ( "xchg" , & [ Acquire ] ) ;
501- let arg0 = self . convert_expr ( ctx. used ( ) , args[ 0 ] , None ) ?;
502- let arg1 = self . convert_expr ( ctx. used ( ) , args[ 1 ] , None ) ?;
501+ let arg0 = self . convert_expr ( ctx. used ( ) , args[ 0 ] ) ?;
502+ let arg1 = self . convert_expr ( ctx. used ( ) , args[ 1 ] ) ?;
503503 arg0. and_then ( |arg0| {
504504 arg1. and_then ( |arg1| {
505505 let call_expr = mk ( ) . call_expr ( atomic_func, vec ! [ arg0, arg1] ) ;
@@ -519,7 +519,7 @@ impl<'c> Translation<'c> {
519519 | "__sync_lock_release_16" => {
520520 // Emit `atomic_store_release(arg0, 0)`
521521 let atomic_func = self . atomic_intrinsic_expr ( "store" , & [ Release ] ) ;
522- let arg0 = self . convert_expr ( ctx. used ( ) , args[ 0 ] , None ) ?;
522+ let arg0 = self . convert_expr ( ctx. used ( ) , args[ 0 ] ) ?;
523523 arg0. and_then ( |arg0| {
524524 let zero = mk ( ) . lit_expr ( mk ( ) . int_lit ( 0 , "" ) ) ;
525525 let call_expr = mk ( ) . call_expr ( atomic_func, vec ! [ arg0, zero] ) ;
@@ -532,7 +532,7 @@ impl<'c> Translation<'c> {
532532 }
533533 // There's currently no way to replicate this functionality in Rust, so we just
534534 // pass the ptr input param in its place.
535- "__builtin_assume_aligned" => Ok ( self . convert_expr ( ctx. used ( ) , args[ 0 ] , None ) ?) ,
535+ "__builtin_assume_aligned" => Ok ( self . convert_expr ( ctx. used ( ) , args[ 0 ] ) ?) ,
536536 // Skip over, there's no way to implement it in Rust
537537 "__builtin_unwind_init" => Ok ( WithStmts :: new_val ( self . panic_or_err ( "no value" ) ) ) ,
538538 "__builtin_unreachable" => Ok ( WithStmts :: new (
@@ -556,8 +556,8 @@ impl<'c> Translation<'c> {
556556
557557 _ => {
558558 if let Some ( atomic_op) = CAtomicBinOp :: from_sync_builtin_fn ( builtin_name) {
559- let arg0 = self . convert_expr ( ctx. used ( ) , args[ 0 ] , None ) ?;
560- let arg1 = self . convert_expr ( ctx. used ( ) , args[ 1 ] , None ) ?;
559+ let arg0 = self . convert_expr ( ctx. used ( ) , args[ 0 ] ) ?;
560+ let arg1 = self . convert_expr ( ctx. used ( ) , args[ 1 ] ) ?;
561561 let arg1_type_id = self . ast_context [ args[ 1 ] ]
562562 . kind
563563 . get_qual_type ( )
@@ -608,7 +608,7 @@ impl<'c> Translation<'c> {
608608 method_name : & str ,
609609 args : & [ CExprId ] ,
610610 ) -> TranslationResult < WithStmts < Box < Expr > > > {
611- let args = self . convert_exprs ( ctx. used ( ) , args, None ) ?;
611+ let args = self . convert_exprs ( ctx. used ( ) , args) ?;
612612 args. and_then ( |args| {
613613 let [ a, b, c] : [ _ ; 3 ] = args
614614 . try_into ( )
@@ -648,7 +648,7 @@ impl<'c> Translation<'c> {
648648 let name = & builtin_name[ 10 ..] ;
649649 self . use_crate ( ExternCrate :: Libc ) ;
650650 let mem = mk ( ) . abs_path_expr ( vec ! [ "libc" , name] ) ;
651- let args = self . convert_exprs ( ctx. used ( ) , args, None ) ?;
651+ let args = self . convert_exprs ( ctx. used ( ) , args) ?;
652652 args. and_then ( |args| {
653653 if args. len ( ) != arg_types. len ( ) {
654654 // This should not generally happen, as the C frontend checks these first
0 commit comments