@@ -20,6 +20,7 @@ fn equate_intrinsic_type<'tcx>(
2020 it : & hir:: ForeignItem < ' _ > ,
2121 n_tps : usize ,
2222 n_lts : usize ,
23+ n_cts : usize ,
2324 sig : ty:: PolyFnSig < ' tcx > ,
2425) {
2526 let ( own_counts, span) = match & it. kind {
@@ -51,7 +52,7 @@ fn equate_intrinsic_type<'tcx>(
5152
5253 if gen_count_ok ( own_counts. lifetimes , n_lts, "lifetime" )
5354 && gen_count_ok ( own_counts. types , n_tps, "type" )
54- && gen_count_ok ( own_counts. consts , 0 , "const" )
55+ && gen_count_ok ( own_counts. consts , n_cts , "const" )
5556 {
5657 let fty = Ty :: new_fn_ptr ( tcx, sig) ;
5758 let it_def_id = it. owner_id . def_id ;
@@ -492,7 +493,7 @@ pub fn check_intrinsic_type(tcx: TyCtxt<'_>, it: &hir::ForeignItem<'_>) {
492493 } ;
493494 let sig = tcx. mk_fn_sig ( inputs, output, false , unsafety, Abi :: RustIntrinsic ) ;
494495 let sig = ty:: Binder :: bind_with_vars ( sig, bound_vars) ;
495- equate_intrinsic_type ( tcx, it, n_tps, n_lts, sig)
496+ equate_intrinsic_type ( tcx, it, n_tps, n_lts, 0 , sig)
496497}
497498
498499/// Type-check `extern "platform-intrinsic" { ... }` functions.
@@ -504,9 +505,9 @@ pub fn check_platform_intrinsic_type(tcx: TyCtxt<'_>, it: &hir::ForeignItem<'_>)
504505
505506 let name = it. ident . name ;
506507
507- let ( n_tps, inputs, output) = match name {
508+ let ( n_tps, n_cts , inputs, output) = match name {
508509 sym:: simd_eq | sym:: simd_ne | sym:: simd_lt | sym:: simd_le | sym:: simd_gt | sym:: simd_ge => {
509- ( 2 , vec ! [ param( 0 ) , param( 0 ) ] , param ( 1 ) )
510+ ( 2 , 0 , vec ! [ param( 0 ) , param( 0 ) ] , param ( 1 ) )
510511 }
511512 sym:: simd_add
512513 | sym:: simd_sub
@@ -522,8 +523,8 @@ pub fn check_platform_intrinsic_type(tcx: TyCtxt<'_>, it: &hir::ForeignItem<'_>)
522523 | sym:: simd_fmax
523524 | sym:: simd_fpow
524525 | sym:: simd_saturating_add
525- | sym:: simd_saturating_sub => ( 1 , vec ! [ param( 0 ) , param( 0 ) ] , param ( 0 ) ) ,
526- sym:: simd_arith_offset => ( 2 , vec ! [ param( 0 ) , param( 1 ) ] , param ( 0 ) ) ,
526+ | sym:: simd_saturating_sub => ( 1 , 0 , vec ! [ param( 0 ) , param( 0 ) ] , param ( 0 ) ) ,
527+ sym:: simd_arith_offset => ( 2 , 0 , vec ! [ param( 0 ) , param( 1 ) ] , param ( 0 ) ) ,
527528 sym:: simd_neg
528529 | sym:: simd_bswap
529530 | sym:: simd_bitreverse
@@ -541,25 +542,25 @@ pub fn check_platform_intrinsic_type(tcx: TyCtxt<'_>, it: &hir::ForeignItem<'_>)
541542 | sym:: simd_ceil
542543 | sym:: simd_floor
543544 | sym:: simd_round
544- | sym:: simd_trunc => ( 1 , vec ! [ param( 0 ) ] , param ( 0 ) ) ,
545- sym:: simd_fpowi => ( 1 , vec ! [ param( 0 ) , tcx. types. i32 ] , param ( 0 ) ) ,
546- sym:: simd_fma => ( 1 , vec ! [ param( 0 ) , param( 0 ) , param( 0 ) ] , param ( 0 ) ) ,
547- sym:: simd_gather => ( 3 , vec ! [ param( 0 ) , param( 1 ) , param( 2 ) ] , param ( 0 ) ) ,
548- sym:: simd_scatter => ( 3 , vec ! [ param( 0 ) , param( 1 ) , param( 2 ) ] , Ty :: new_unit ( tcx) ) ,
549- sym:: simd_insert => ( 2 , vec ! [ param( 0 ) , tcx. types. u32 , param( 1 ) ] , param ( 0 ) ) ,
550- sym:: simd_extract => ( 2 , vec ! [ param( 0 ) , tcx. types. u32 ] , param ( 1 ) ) ,
545+ | sym:: simd_trunc => ( 1 , 0 , vec ! [ param( 0 ) ] , param ( 0 ) ) ,
546+ sym:: simd_fpowi => ( 1 , 0 , vec ! [ param( 0 ) , tcx. types. i32 ] , param ( 0 ) ) ,
547+ sym:: simd_fma => ( 1 , 0 , vec ! [ param( 0 ) , param( 0 ) , param( 0 ) ] , param ( 0 ) ) ,
548+ sym:: simd_gather => ( 3 , 0 , vec ! [ param( 0 ) , param( 1 ) , param( 2 ) ] , param ( 0 ) ) ,
549+ sym:: simd_scatter => ( 3 , 0 , vec ! [ param( 0 ) , param( 1 ) , param( 2 ) ] , Ty :: new_unit ( tcx) ) ,
550+ sym:: simd_insert => ( 2 , 0 , vec ! [ param( 0 ) , tcx. types. u32 , param( 1 ) ] , param ( 0 ) ) ,
551+ sym:: simd_extract => ( 2 , 0 , vec ! [ param( 0 ) , tcx. types. u32 ] , param ( 1 ) ) ,
551552 sym:: simd_cast
552553 | sym:: simd_as
553554 | sym:: simd_cast_ptr
554555 | sym:: simd_expose_addr
555- | sym:: simd_from_exposed_addr => ( 2 , vec ! [ param( 0 ) ] , param ( 1 ) ) ,
556- sym:: simd_bitmask => ( 2 , vec ! [ param( 0 ) ] , param ( 1 ) ) ,
556+ | sym:: simd_from_exposed_addr => ( 2 , 0 , vec ! [ param( 0 ) ] , param ( 1 ) ) ,
557+ sym:: simd_bitmask => ( 2 , 0 , vec ! [ param( 0 ) ] , param ( 1 ) ) ,
557558 sym:: simd_select | sym:: simd_select_bitmask => {
558- ( 2 , vec ! [ param( 0 ) , param( 1 ) , param( 1 ) ] , param ( 1 ) )
559+ ( 2 , 0 , vec ! [ param( 0 ) , param( 1 ) , param( 1 ) ] , param ( 1 ) )
559560 }
560- sym:: simd_reduce_all | sym:: simd_reduce_any => ( 1 , vec ! [ param( 0 ) ] , tcx. types . bool ) ,
561+ sym:: simd_reduce_all | sym:: simd_reduce_any => ( 1 , 0 , vec ! [ param( 0 ) ] , tcx. types . bool ) ,
561562 sym:: simd_reduce_add_ordered | sym:: simd_reduce_mul_ordered => {
562- ( 2 , vec ! [ param( 0 ) , param( 1 ) ] , param ( 1 ) )
563+ ( 2 , 0 , vec ! [ param( 0 ) , param( 1 ) ] , param ( 1 ) )
563564 }
564565 sym:: simd_reduce_add_unordered
565566 | sym:: simd_reduce_mul_unordered
@@ -569,8 +570,9 @@ pub fn check_platform_intrinsic_type(tcx: TyCtxt<'_>, it: &hir::ForeignItem<'_>)
569570 | sym:: simd_reduce_min
570571 | sym:: simd_reduce_max
571572 | sym:: simd_reduce_min_nanless
572- | sym:: simd_reduce_max_nanless => ( 2 , vec ! [ param( 0 ) ] , param ( 1 ) ) ,
573- sym:: simd_shuffle => ( 3 , vec ! [ param( 0 ) , param( 0 ) , param( 1 ) ] , param ( 2 ) ) ,
573+ | sym:: simd_reduce_max_nanless => ( 2 , 0 , vec ! [ param( 0 ) ] , param ( 1 ) ) ,
574+ sym:: simd_shuffle => ( 3 , 0 , vec ! [ param( 0 ) , param( 0 ) , param( 1 ) ] , param ( 2 ) ) ,
575+ sym:: simd_shuffle_generic => ( 2 , 1 , vec ! [ param( 0 ) , param( 0 ) ] , param ( 1 ) ) ,
574576 _ => {
575577 let msg = format ! ( "unrecognized platform-specific intrinsic function: `{name}`" ) ;
576578 tcx. sess . struct_span_err ( it. span , msg) . emit ( ) ;
@@ -580,5 +582,5 @@ pub fn check_platform_intrinsic_type(tcx: TyCtxt<'_>, it: &hir::ForeignItem<'_>)
580582
581583 let sig = tcx. mk_fn_sig ( inputs, output, false , hir:: Unsafety :: Unsafe , Abi :: PlatformIntrinsic ) ;
582584 let sig = ty:: Binder :: dummy ( sig) ;
583- equate_intrinsic_type ( tcx, it, n_tps, 0 , sig)
585+ equate_intrinsic_type ( tcx, it, n_tps, 0 , n_cts , sig)
584586}
0 commit comments