@@ -3451,122 +3451,152 @@ pub fn check_intrinsic_type(ccx: @mut CrateCtxt, it: @ast::foreign_item) {
34513451
34523452 let tcx = ccx. tcx ;
34533453 let ( n_tps, inputs, output) = match * ccx. tcx . sess . str_of ( it. ident ) {
3454- ~"size_of" |
3455- ~"pref_align_of" | ~"min_align_of" => ( 1 u, ~[ ] , ty:: mk_uint ( ) ) ,
3456- ~"init" => ( 1 u, ~[ ] , param ( ccx, 0 u) ) ,
3457- ~"uninit" => ( 1 u, ~[ ] , param ( ccx, 0 u) ) ,
3458- ~"forget" => ( 1 u, ~[ param ( ccx, 0 ) ] , ty:: mk_nil ( ) ) ,
3459- ~"transmute" => ( 2 , ~[ param ( ccx, 0 ) ] , param ( ccx, 1 ) ) ,
3460- ~"move_val" | ~"move_val_init" => {
3461- ( 1 u,
3454+ ~"size_of" |
3455+ ~"pref_align_of" | ~"min_align_of" => ( 1 u, ~[ ] , ty:: mk_uint ( ) ) ,
3456+ ~"init" => ( 1 u, ~[ ] , param ( ccx, 0 u) ) ,
3457+ ~"uninit" => ( 1 u, ~[ ] , param ( ccx, 0 u) ) ,
3458+ ~"forget" => ( 1 u, ~[ param ( ccx, 0 ) ] , ty:: mk_nil ( ) ) ,
3459+ ~"transmute" => ( 2 , ~[ param ( ccx, 0 ) ] , param ( ccx, 1 ) ) ,
3460+ ~"move_val" | ~"move_val_init" => {
3461+ ( 1 u,
3462+ ~[
3463+ ty:: mk_mut_rptr ( tcx, ty:: re_bound ( ty:: br_anon ( 0 ) ) , param ( ccx, 0 ) ) ,
3464+ param ( ccx, 0 u)
3465+ ] ,
3466+ ty:: mk_nil ( ) )
3467+ }
3468+ ~"needs_drop" => ( 1 u, ~[ ] , ty:: mk_bool ( ) ) ,
3469+
3470+ ~"atomic_cxchg" | ~"atomic_cxchg_acq"| ~"atomic_cxchg_rel" => {
3471+ ( 0 ,
34623472 ~[
3463- ty:: mk_mut_rptr ( tcx, ty:: re_bound ( ty:: br_anon ( 0 ) ) , param ( ccx, 0 ) ) ,
3464- param ( ccx, 0 u)
3465- ] ,
3466- ty:: mk_nil ( ) )
3467- }
3468- ~"needs_drop" => ( 1 u, ~[ ] , ty:: mk_bool ( ) ) ,
3469-
3470- ~"atomic_cxchg" | ~"atomic_cxchg_acq"| ~"atomic_cxchg_rel" => {
3471- ( 0 ,
3472- ~[
3473- ty:: mk_mut_rptr ( tcx,
3474- ty:: re_bound ( ty:: br_anon ( 0 ) ) ,
3475- ty:: mk_int ( ) ) ,
3476- ty:: mk_int ( ) ,
3477- ty:: mk_int ( )
3478- ] ,
3479- ty:: mk_int ( ) )
3480- }
3481- ~"atomic_load" | ~"atomic_load_acq" => {
3482- ( 0 ,
3483- ~[
3484- ty:: mk_imm_rptr ( tcx, ty:: re_bound ( ty:: br_anon ( 0 ) ) , ty:: mk_int ( ) )
3485- ] ,
3486- ty:: mk_int ( ) )
3487- }
3488- ~"atomic_store" | ~"atomic_store_rel" => {
3489- ( 0 ,
3490- ~[
3491- ty:: mk_mut_rptr ( tcx, ty:: re_bound ( ty:: br_anon ( 0 ) ) , ty:: mk_int ( ) ) ,
3492- ty:: mk_int ( )
3493- ] ,
3494- ty:: mk_nil ( ) )
3495- }
3496- ~"atomic_xchg" | ~"atomic_xadd" | ~"atomic_xsub" |
3497- ~"atomic_xchg_acq" | ~"atomic_xadd_acq" | ~"atomic_xsub_acq" |
3498- ~"atomic_xchg_rel" | ~"atomic_xadd_rel" | ~"atomic_xsub_rel" => {
3499- ( 0 ,
3500- ~[
3501- ty:: mk_mut_rptr ( tcx, ty:: re_bound ( ty:: br_anon ( 0 ) ) , ty:: mk_int ( ) ) ,
3502- ty:: mk_int ( )
3503- ] ,
3504- ty:: mk_int ( ) )
3505- }
3506-
3507- ~"get_tydesc" => {
3508- // FIXME (#3730): return *intrinsic::tydesc, not *()
3509- ( 1 u, ~[ ] , ty:: mk_nil_ptr ( ccx. tcx ) )
3510- }
3511- ~"visit_tydesc" => {
3512- let tydesc_name = special_idents:: tydesc;
3513- assert ! ( tcx. intrinsic_defs. contains_key( & tydesc_name) ) ;
3514- let ( _, tydesc_ty) = tcx. intrinsic_defs . get_copy ( & tydesc_name) ;
3515- let ( _, visitor_object_ty) = ty:: visitor_object_ty ( tcx) ;
3516- let td_ptr = ty:: mk_ptr ( ccx. tcx , ty:: mt {
3517- ty : tydesc_ty,
3518- mutbl : ast:: m_imm
3519- } ) ;
3520- ( 0 , ~[ td_ptr, visitor_object_ty ] , ty:: mk_nil ( ) )
3521- }
3522- ~"frame_address" => {
3523- let fty = ty:: mk_closure ( ccx. tcx , ty:: ClosureTy {
3524- purity : ast:: impure_fn,
3525- sigil : ast:: BorrowedSigil ,
3526- onceness : ast:: Once ,
3527- region : ty:: re_bound ( ty:: br_anon ( 0 ) ) ,
3528- bounds : ty:: EmptyBuiltinBounds ( ) ,
3529- sig : ty:: FnSig {
3530- bound_lifetime_names : opt_vec:: Empty ,
3531- inputs : ~[ ty:: mk_imm_ptr ( ccx. tcx , ty:: mk_mach_uint ( ast:: ty_u8) ) ] ,
3532- output : ty:: mk_nil ( )
3533- }
3534- } ) ;
3535- ( 0 u, ~[ fty] , ty:: mk_nil ( ) )
3536- }
3537- ~"morestack_addr" => {
3538- ( 0 u, ~[ ] , ty:: mk_nil_ptr ( ccx. tcx ) )
3539- }
3540- ~"memmove32" => {
3541- ( 0 ,
3542- ~[
3543- ty:: mk_ptr ( tcx, ty:: mt {
3544- ty : ty:: mk_u8 ( ) ,
3545- mutbl : ast:: m_mutbl
3546- } ) ,
3547- ty:: mk_ptr ( tcx, ty:: mt {
3548- ty : ty:: mk_u8 ( ) ,
3549- mutbl : ast:: m_imm
3550- } ) ,
3551- ty:: mk_u32 ( )
3552- ] ,
3553- ty:: mk_nil ( ) )
3554- }
3555- ~"memmove64" => {
3556- ( 0 ,
3557- ~[
3558- ty:: mk_ptr ( tcx, ty:: mt {
3559- ty : ty:: mk_u8 ( ) ,
3560- mutbl : ast:: m_mutbl
3561- } ) ,
3562- ty:: mk_ptr ( tcx, ty:: mt {
3563- ty : ty:: mk_u8 ( ) ,
3564- mutbl : ast:: m_imm
3565- } ) ,
3566- ty:: mk_u64 ( )
3567- ] ,
3568- ty:: mk_nil ( ) )
3569- }
3473+ ty:: mk_mut_rptr ( tcx,
3474+ ty:: re_bound ( ty:: br_anon ( 0 ) ) ,
3475+ ty:: mk_int ( ) ) ,
3476+ ty:: mk_int ( ) ,
3477+ ty:: mk_int ( )
3478+ ] ,
3479+ ty:: mk_int ( ) )
3480+ }
3481+ ~"atomic_load" | ~"atomic_load_acq" => {
3482+ ( 0 ,
3483+ ~[
3484+ ty:: mk_imm_rptr ( tcx, ty:: re_bound ( ty:: br_anon ( 0 ) ) , ty:: mk_int ( ) )
3485+ ] ,
3486+ ty:: mk_int ( ) )
3487+ }
3488+ ~"atomic_store" | ~"atomic_store_rel" => {
3489+ ( 0 ,
3490+ ~[
3491+ ty:: mk_mut_rptr ( tcx, ty:: re_bound ( ty:: br_anon ( 0 ) ) , ty:: mk_int ( ) ) ,
3492+ ty:: mk_int ( )
3493+ ] ,
3494+ ty:: mk_nil ( ) )
3495+ }
3496+ ~"atomic_xchg" | ~"atomic_xadd" | ~"atomic_xsub" |
3497+ ~"atomic_xchg_acq" | ~"atomic_xadd_acq" | ~"atomic_xsub_acq" |
3498+ ~"atomic_xchg_rel" | ~"atomic_xadd_rel" | ~"atomic_xsub_rel" => {
3499+ ( 0 ,
3500+ ~[
3501+ ty:: mk_mut_rptr ( tcx, ty:: re_bound ( ty:: br_anon ( 0 ) ) , ty:: mk_int ( ) ) ,
3502+ ty:: mk_int ( )
3503+ ] ,
3504+ ty:: mk_int ( ) )
3505+ }
3506+
3507+ ~"get_tydesc" => {
3508+ // FIXME (#3730): return *intrinsic::tydesc, not *()
3509+ ( 1 u, ~[ ] , ty:: mk_nil_ptr ( ccx. tcx ) )
3510+ }
3511+ ~"visit_tydesc" => {
3512+ let tydesc_name = special_idents:: tydesc;
3513+ assert ! ( tcx. intrinsic_defs. contains_key( & tydesc_name) ) ;
3514+ let ( _, tydesc_ty) = tcx. intrinsic_defs . get_copy ( & tydesc_name) ;
3515+ let ( _, visitor_object_ty) = ty:: visitor_object_ty ( tcx) ;
3516+ let td_ptr = ty:: mk_ptr ( ccx. tcx , ty:: mt {
3517+ ty : tydesc_ty,
3518+ mutbl : ast:: m_imm
3519+ } ) ;
3520+ ( 0 , ~[ td_ptr, visitor_object_ty ] , ty:: mk_nil ( ) )
3521+ }
3522+ ~"frame_address" => {
3523+ let fty = ty:: mk_closure ( ccx. tcx , ty:: ClosureTy {
3524+ purity : ast:: impure_fn,
3525+ sigil : ast:: BorrowedSigil ,
3526+ onceness : ast:: Once ,
3527+ region : ty:: re_bound ( ty:: br_anon ( 0 ) ) ,
3528+ bounds : ty:: EmptyBuiltinBounds ( ) ,
3529+ sig : ty:: FnSig {
3530+ bound_lifetime_names : opt_vec:: Empty ,
3531+ inputs : ~[ ty:: mk_imm_ptr ( ccx. tcx , ty:: mk_mach_uint ( ast:: ty_u8) ) ] ,
3532+ output : ty:: mk_nil ( )
3533+ }
3534+ } ) ;
3535+ ( 0 u, ~[ fty] , ty:: mk_nil ( ) )
3536+ }
3537+ ~"morestack_addr" => {
3538+ ( 0 u, ~[ ] , ty:: mk_nil_ptr ( ccx. tcx ) )
3539+ }
3540+ ~"memcpy32" => {
3541+ ( 0 ,
3542+ ~[
3543+ ty:: mk_ptr ( tcx, ty:: mt {
3544+ ty : ty:: mk_u8 ( ) ,
3545+ mutbl : ast:: m_mutbl
3546+ } ) ,
3547+ ty:: mk_ptr ( tcx, ty:: mt {
3548+ ty : ty:: mk_u8 ( ) ,
3549+ mutbl : ast:: m_imm
3550+ } ) ,
3551+ ty:: mk_u32 ( )
3552+ ] ,
3553+ ty:: mk_nil ( ) )
3554+ }
3555+ ~"memcpy64" => {
3556+ ( 0 ,
3557+ ~[
3558+ ty:: mk_ptr ( tcx, ty:: mt {
3559+ ty : ty:: mk_u8 ( ) ,
3560+ mutbl : ast:: m_mutbl
3561+ } ) ,
3562+ ty:: mk_ptr ( tcx, ty:: mt {
3563+ ty : ty:: mk_u8 ( ) ,
3564+ mutbl : ast:: m_imm
3565+ } ) ,
3566+ ty:: mk_u64 ( )
3567+ ] ,
3568+ ty:: mk_nil ( ) )
3569+ }
3570+ ~"memmove32" => {
3571+ ( 0 ,
3572+ ~[
3573+ ty:: mk_ptr ( tcx, ty:: mt {
3574+ ty : ty:: mk_u8 ( ) ,
3575+ mutbl : ast:: m_mutbl
3576+ } ) ,
3577+ ty:: mk_ptr ( tcx, ty:: mt {
3578+ ty : ty:: mk_u8 ( ) ,
3579+ mutbl : ast:: m_imm
3580+ } ) ,
3581+ ty:: mk_u32 ( )
3582+ ] ,
3583+ ty:: mk_nil ( ) )
3584+ }
3585+ ~"memmove64" => {
3586+ ( 0 ,
3587+ ~[
3588+ ty:: mk_ptr ( tcx, ty:: mt {
3589+ ty : ty:: mk_u8 ( ) ,
3590+ mutbl : ast:: m_mutbl
3591+ } ) ,
3592+ ty:: mk_ptr ( tcx, ty:: mt {
3593+ ty : ty:: mk_u8 ( ) ,
3594+ mutbl : ast:: m_imm
3595+ } ) ,
3596+ ty:: mk_u64 ( )
3597+ ] ,
3598+ ty:: mk_nil ( ) )
3599+ }
35703600 ~"sqrtf32" => ( 0 , ~[ ty:: mk_f32 ( ) ] , ty:: mk_f32 ( ) ) ,
35713601 ~"sqrtf64" => ( 0 , ~[ ty:: mk_f64 ( ) ] , ty:: mk_f64 ( ) ) ,
35723602 ~"powif32" => {
0 commit comments