@@ -3451,122 +3451,152 @@ pub fn check_intrinsic_type(ccx: @mut CrateCtxt, it: @ast::foreign_item) {
3451
3451
3452
3452
let tcx = ccx. tcx ;
3453
3453
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 ,
3462
3472
~[
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
+ }
3570
3600
~"sqrtf32" => ( 0 , ~[ ty:: mk_f32 ( ) ] , ty:: mk_f32 ( ) ) ,
3571
3601
~"sqrtf64" => ( 0 , ~[ ty:: mk_f64 ( ) ] , ty:: mk_f64 ( ) ) ,
3572
3602
~"powif32" => {
0 commit comments