@@ -26,7 +26,7 @@ use rustc_middle::ty::layout::FnAbiOf;
26
26
use rustc_middle:: ty:: layout:: { HasTypingEnv , LayoutOf } ;
27
27
use rustc_middle:: ty:: { self , Instance , Ty } ;
28
28
use rustc_span:: { Span , Symbol , sym} ;
29
- use rustc_target:: callconv:: { ArgAbi , FnAbi , PassMode } ;
29
+ use rustc_target:: callconv:: { ArgAbi , PassMode } ;
30
30
use rustc_target:: spec:: PanicStrategy ;
31
31
32
32
#[ cfg( feature = "master" ) ]
@@ -200,7 +200,6 @@ impl<'a, 'gcc, 'tcx> IntrinsicCallBuilderMethods<'tcx> for Builder<'a, 'gcc, 'tc
200
200
fn codegen_intrinsic_call (
201
201
& mut self ,
202
202
instance : Instance < ' tcx > ,
203
- fn_abi : & FnAbi < ' tcx , Ty < ' tcx > > ,
204
203
args : & [ OperandRef < ' tcx , RValue < ' gcc > > ] ,
205
204
result : PlaceRef < ' tcx , RValue < ' gcc > > ,
206
205
span : Span ,
@@ -285,17 +284,10 @@ impl<'a, 'gcc, 'tcx> IntrinsicCallBuilderMethods<'tcx> for Builder<'a, 'gcc, 'tc
285
284
}
286
285
287
286
sym:: volatile_load | sym:: unaligned_volatile_load => {
288
- let tp_ty = fn_args. type_at ( 0 ) ;
289
287
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) ;
297
289
// TODO(antoyo): set alignment.
298
- if let BackendRepr :: Scalar ( scalar) = layout. backend_repr {
290
+ if let BackendRepr :: Scalar ( scalar) = result . layout . backend_repr {
299
291
self . to_immediate_scalar ( load, scalar)
300
292
} else {
301
293
load
@@ -510,16 +502,14 @@ impl<'a, 'gcc, 'tcx> IntrinsicCallBuilderMethods<'tcx> for Builder<'a, 'gcc, 'tc
510
502
_ => return Err ( Instance :: new_raw ( instance. def_id ( ) , instance. args ) ) ,
511
503
} ;
512
504
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 ) ;
523
513
}
524
514
Ok ( ( ) )
525
515
}
0 commit comments