@@ -26,7 +26,7 @@ use rustc_middle::ty::layout::FnAbiOf;
2626use rustc_middle:: ty:: layout:: { HasTypingEnv , LayoutOf } ;
2727use rustc_middle:: ty:: { self , Instance , Ty } ;
2828use rustc_span:: { Span , Symbol , sym} ;
29- use rustc_target:: callconv:: { ArgAbi , FnAbi , PassMode } ;
29+ use rustc_target:: callconv:: { ArgAbi , PassMode } ;
3030use rustc_target:: spec:: PanicStrategy ;
3131
3232#[ cfg( feature = "master" ) ]
@@ -200,7 +200,6 @@ impl<'a, 'gcc, 'tcx> IntrinsicCallBuilderMethods<'tcx> for Builder<'a, 'gcc, 'tc
200200 fn codegen_intrinsic_call (
201201 & mut self ,
202202 instance : Instance < ' tcx > ,
203- fn_abi : & FnAbi < ' tcx , Ty < ' tcx > > ,
204203 args : & [ OperandRef < ' tcx , RValue < ' gcc > > ] ,
205204 result : PlaceRef < ' tcx , RValue < ' gcc > > ,
206205 span : Span ,
@@ -285,17 +284,10 @@ impl<'a, 'gcc, 'tcx> IntrinsicCallBuilderMethods<'tcx> for Builder<'a, 'gcc, 'tc
285284 }
286285
287286 sym:: volatile_load | sym:: unaligned_volatile_load => {
288- let tp_ty = fn_args. type_at ( 0 ) ;
289287 let ptr = args[ 0 ] . immediate ( ) ;
290- let layout = self . layout_of ( tp_ty) ;
291- let load = if let PassMode :: Cast { cast : ref ty, pad_i32 : _ } = fn_abi. ret . mode {
292- let gcc_ty = ty. gcc_type ( self ) ;
293- self . volatile_load ( gcc_ty, ptr)
294- } else {
295- self . volatile_load ( layout. gcc_type ( self ) , ptr)
296- } ;
288+ let load = self . volatile_load ( result. layout . gcc_type ( self ) , ptr) ;
297289 // TODO(antoyo): set alignment.
298- if let BackendRepr :: Scalar ( scalar) = layout. backend_repr {
290+ if let BackendRepr :: Scalar ( scalar) = result . layout . backend_repr {
299291 self . to_immediate_scalar ( load, scalar)
300292 } else {
301293 load
@@ -510,16 +502,14 @@ impl<'a, 'gcc, 'tcx> IntrinsicCallBuilderMethods<'tcx> for Builder<'a, 'gcc, 'tc
510502 _ => return Err ( Instance :: new_raw ( instance. def_id ( ) , instance. args ) ) ,
511503 } ;
512504
513- if !fn_abi. ret . is_ignore ( ) {
514- if let PassMode :: Cast { cast : ref ty, .. } = fn_abi. ret . mode {
515- let ptr_llty = self . type_ptr_to ( ty. gcc_type ( self ) ) ;
516- let ptr = self . pointercast ( result. val . llval , ptr_llty) ;
517- self . store ( value, ptr, result. val . align ) ;
518- } else {
519- OperandRef :: from_immediate_or_packed_pair ( self , value, result. layout )
520- . val
521- . store ( self , result) ;
522- }
505+ if result. layout . ty . is_bool ( ) {
506+ OperandRef :: from_immediate_or_packed_pair ( self , value, result. layout )
507+ . val
508+ . store ( self , result) ;
509+ } else if !result. layout . ty . is_unit ( ) {
510+ let ptr_llty = self . type_ptr_to ( result. layout . gcc_type ( self ) ) ;
511+ let ptr = self . pointercast ( result. val . llval , ptr_llty) ;
512+ self . store ( value, ptr, result. val . align ) ;
523513 }
524514 Ok ( ( ) )
525515 }
0 commit comments