@@ -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 it_def_id = it. owner_id . def_id ;
5758 check_function_signature (
@@ -489,7 +490,7 @@ pub fn check_intrinsic_type(tcx: TyCtxt<'_>, it: &hir::ForeignItem<'_>) {
489490 } ;
490491 let sig = tcx. mk_fn_sig ( inputs, output, false , unsafety, Abi :: RustIntrinsic ) ;
491492 let sig = ty:: Binder :: bind_with_vars ( sig, bound_vars) ;
492- equate_intrinsic_type ( tcx, it, n_tps, n_lts, sig)
493+ equate_intrinsic_type ( tcx, it, n_tps, n_lts, 0 , sig)
493494}
494495
495496/// Type-check `extern "platform-intrinsic" { ... }` functions.
@@ -501,9 +502,9 @@ pub fn check_platform_intrinsic_type(tcx: TyCtxt<'_>, it: &hir::ForeignItem<'_>)
501502
502503 let name = it. ident . name ;
503504
504- let ( n_tps, inputs, output) = match name {
505+ let ( n_tps, n_cts , inputs, output) = match name {
505506 sym:: simd_eq | sym:: simd_ne | sym:: simd_lt | sym:: simd_le | sym:: simd_gt | sym:: simd_ge => {
506- ( 2 , vec ! [ param( 0 ) , param( 0 ) ] , param ( 1 ) )
507+ ( 2 , 0 , vec ! [ param( 0 ) , param( 0 ) ] , param ( 1 ) )
507508 }
508509 sym:: simd_add
509510 | sym:: simd_sub
@@ -519,8 +520,8 @@ pub fn check_platform_intrinsic_type(tcx: TyCtxt<'_>, it: &hir::ForeignItem<'_>)
519520 | sym:: simd_fmax
520521 | sym:: simd_fpow
521522 | sym:: simd_saturating_add
522- | sym:: simd_saturating_sub => ( 1 , vec ! [ param( 0 ) , param( 0 ) ] , param ( 0 ) ) ,
523- sym:: simd_arith_offset => ( 2 , vec ! [ param( 0 ) , param( 1 ) ] , param ( 0 ) ) ,
523+ | sym:: simd_saturating_sub => ( 1 , 0 , vec ! [ param( 0 ) , param( 0 ) ] , param ( 0 ) ) ,
524+ sym:: simd_arith_offset => ( 2 , 0 , vec ! [ param( 0 ) , param( 1 ) ] , param ( 0 ) ) ,
524525 sym:: simd_neg
525526 | sym:: simd_bswap
526527 | sym:: simd_bitreverse
@@ -538,25 +539,25 @@ pub fn check_platform_intrinsic_type(tcx: TyCtxt<'_>, it: &hir::ForeignItem<'_>)
538539 | sym:: simd_ceil
539540 | sym:: simd_floor
540541 | sym:: simd_round
541- | sym:: simd_trunc => ( 1 , vec ! [ param( 0 ) ] , param ( 0 ) ) ,
542- sym:: simd_fpowi => ( 1 , vec ! [ param( 0 ) , tcx. types. i32 ] , param ( 0 ) ) ,
543- sym:: simd_fma => ( 1 , vec ! [ param( 0 ) , param( 0 ) , param( 0 ) ] , param ( 0 ) ) ,
544- sym:: simd_gather => ( 3 , vec ! [ param( 0 ) , param( 1 ) , param( 2 ) ] , param ( 0 ) ) ,
545- sym:: simd_scatter => ( 3 , vec ! [ param( 0 ) , param( 1 ) , param( 2 ) ] , Ty :: new_unit ( tcx) ) ,
546- sym:: simd_insert => ( 2 , vec ! [ param( 0 ) , tcx. types. u32 , param( 1 ) ] , param ( 0 ) ) ,
547- sym:: simd_extract => ( 2 , vec ! [ param( 0 ) , tcx. types. u32 ] , param ( 1 ) ) ,
542+ | sym:: simd_trunc => ( 1 , 0 , vec ! [ param( 0 ) ] , param ( 0 ) ) ,
543+ sym:: simd_fpowi => ( 1 , 0 , vec ! [ param( 0 ) , tcx. types. i32 ] , param ( 0 ) ) ,
544+ sym:: simd_fma => ( 1 , 0 , vec ! [ param( 0 ) , param( 0 ) , param( 0 ) ] , param ( 0 ) ) ,
545+ sym:: simd_gather => ( 3 , 0 , vec ! [ param( 0 ) , param( 1 ) , param( 2 ) ] , param ( 0 ) ) ,
546+ sym:: simd_scatter => ( 3 , 0 , vec ! [ param( 0 ) , param( 1 ) , param( 2 ) ] , Ty :: new_unit ( tcx) ) ,
547+ sym:: simd_insert => ( 2 , 0 , vec ! [ param( 0 ) , tcx. types. u32 , param( 1 ) ] , param ( 0 ) ) ,
548+ sym:: simd_extract => ( 2 , 0 , vec ! [ param( 0 ) , tcx. types. u32 ] , param ( 1 ) ) ,
548549 sym:: simd_cast
549550 | sym:: simd_as
550551 | sym:: simd_cast_ptr
551552 | sym:: simd_expose_addr
552- | sym:: simd_from_exposed_addr => ( 2 , vec ! [ param( 0 ) ] , param ( 1 ) ) ,
553- sym:: simd_bitmask => ( 2 , vec ! [ param( 0 ) ] , param ( 1 ) ) ,
553+ | sym:: simd_from_exposed_addr => ( 2 , 0 , vec ! [ param( 0 ) ] , param ( 1 ) ) ,
554+ sym:: simd_bitmask => ( 2 , 0 , vec ! [ param( 0 ) ] , param ( 1 ) ) ,
554555 sym:: simd_select | sym:: simd_select_bitmask => {
555- ( 2 , vec ! [ param( 0 ) , param( 1 ) , param( 1 ) ] , param ( 1 ) )
556+ ( 2 , 0 , vec ! [ param( 0 ) , param( 1 ) , param( 1 ) ] , param ( 1 ) )
556557 }
557- sym:: simd_reduce_all | sym:: simd_reduce_any => ( 1 , vec ! [ param( 0 ) ] , tcx. types . bool ) ,
558+ sym:: simd_reduce_all | sym:: simd_reduce_any => ( 1 , 0 , vec ! [ param( 0 ) ] , tcx. types . bool ) ,
558559 sym:: simd_reduce_add_ordered | sym:: simd_reduce_mul_ordered => {
559- ( 2 , vec ! [ param( 0 ) , param( 1 ) ] , param ( 1 ) )
560+ ( 2 , 0 , vec ! [ param( 0 ) , param( 1 ) ] , param ( 1 ) )
560561 }
561562 sym:: simd_reduce_add_unordered
562563 | sym:: simd_reduce_mul_unordered
@@ -566,8 +567,9 @@ pub fn check_platform_intrinsic_type(tcx: TyCtxt<'_>, it: &hir::ForeignItem<'_>)
566567 | sym:: simd_reduce_min
567568 | sym:: simd_reduce_max
568569 | sym:: simd_reduce_min_nanless
569- | sym:: simd_reduce_max_nanless => ( 2 , vec ! [ param( 0 ) ] , param ( 1 ) ) ,
570- sym:: simd_shuffle => ( 3 , vec ! [ param( 0 ) , param( 0 ) , param( 1 ) ] , param ( 2 ) ) ,
570+ | sym:: simd_reduce_max_nanless => ( 2 , 0 , vec ! [ param( 0 ) ] , param ( 1 ) ) ,
571+ sym:: simd_shuffle => ( 3 , 0 , vec ! [ param( 0 ) , param( 0 ) , param( 1 ) ] , param ( 2 ) ) ,
572+ sym:: simd_shuffle_generic => ( 2 , 1 , vec ! [ param( 0 ) , param( 0 ) ] , param ( 1 ) ) ,
571573 _ => {
572574 let msg = format ! ( "unrecognized platform-specific intrinsic function: `{name}`" ) ;
573575 tcx. sess . struct_span_err ( it. span , msg) . emit ( ) ;
@@ -577,5 +579,5 @@ pub fn check_platform_intrinsic_type(tcx: TyCtxt<'_>, it: &hir::ForeignItem<'_>)
577579
578580 let sig = tcx. mk_fn_sig ( inputs, output, false , hir:: Unsafety :: Unsafe , Abi :: PlatformIntrinsic ) ;
579581 let sig = ty:: Binder :: dummy ( sig) ;
580- equate_intrinsic_type ( tcx, it, n_tps, 0 , sig)
582+ equate_intrinsic_type ( tcx, it, n_tps, 0 , n_cts , sig)
581583}
0 commit comments