@@ -465,33 +465,38 @@ impl CodegenCx<'b, 'tcx> {
465
465
self . declare_intrinsic ( key) . unwrap_or_else ( || bug ! ( "unknown intrinsic '{}'" , key) )
466
466
}
467
467
468
+ fn insert_intrinsic (
469
+ & self , name : & ' static str , args : Option < & [ & ' b llvm:: Type ] > , ret : & ' b llvm:: Type
470
+ ) -> & ' b llvm:: Value {
471
+ let fn_ty = if let Some ( args) = args {
472
+ self . type_func ( args, ret)
473
+ } else {
474
+ self . type_variadic_func ( & [ ] , ret)
475
+ } ;
476
+ let f = self . declare_cfn ( name, fn_ty) ;
477
+ llvm:: SetUnnamedAddr ( f, false ) ;
478
+ self . intrinsics . borrow_mut ( ) . insert ( name, f. clone ( ) ) ;
479
+ f
480
+ }
481
+
468
482
fn declare_intrinsic (
469
483
& self ,
470
484
key : & str
471
485
) -> Option < & ' b Value > {
472
486
macro_rules! ifn {
473
487
( $name: expr, fn ( ) -> $ret: expr) => (
474
488
if key == $name {
475
- let f = self . declare_cfn( $name, self . type_func( & [ ] , $ret) ) ;
476
- llvm:: SetUnnamedAddr ( f, false ) ;
477
- self . intrinsics. borrow_mut( ) . insert( $name, f. clone( ) ) ;
478
- return Some ( f) ;
489
+ return Some ( self . insert_intrinsic( $name, Some ( & [ ] ) , $ret) ) ;
479
490
}
480
491
) ;
481
492
( $name: expr, fn ( ...) -> $ret: expr) => (
482
493
if key == $name {
483
- let f = self . declare_cfn( $name, self . type_variadic_func( & [ ] , $ret) ) ;
484
- llvm:: SetUnnamedAddr ( f, false ) ;
485
- self . intrinsics. borrow_mut( ) . insert( $name, f. clone( ) ) ;
486
- return Some ( f) ;
494
+ return Some ( self . insert_intrinsic( $name, None , $ret) ) ;
487
495
}
488
496
) ;
489
497
( $name: expr, fn ( $( $arg: expr) ,* ) -> $ret: expr) => (
490
498
if key == $name {
491
- let f = self . declare_cfn( $name, self . type_func( & [ $( $arg) ,* ] , $ret) ) ;
492
- llvm:: SetUnnamedAddr ( f, false ) ;
493
- self . intrinsics. borrow_mut( ) . insert( $name, f. clone( ) ) ;
494
- return Some ( f) ;
499
+ return Some ( self . insert_intrinsic( $name, Some ( & [ $( $arg) ,* ] ) , $ret) ) ;
495
500
}
496
501
) ;
497
502
}
0 commit comments