@@ -417,11 +417,7 @@ fn expand_format_args<'hir>(
417
417
// ```
418
418
// Piece::num(4),
419
419
// ```
420
- let i = if ctx. tcx . sess . target . pointer_width >= 64 {
421
- ctx. expr_u64 ( fmt. span , len as u64 )
422
- } else {
423
- ctx. expr_u32 ( fmt. span , len as u32 )
424
- } ;
420
+ let i = ctx. expr_usize ( macsp, len as u64 ) ;
425
421
pieces. push ( make_piece ( ctx, sym:: num, i, macsp) ) ;
426
422
427
423
// ```
@@ -434,11 +430,18 @@ fn expand_format_args<'hir>(
434
430
// ```
435
431
// Piece::num(0xE000_0020_0000_0000),
436
432
// ```
437
- // Or, on <64 bit platforms:
433
+ // Or, on 32 bit platforms:
438
434
// ```
439
435
// Piece::num(0xE000_0020),
440
436
// Piece::num(0x0000_0000),
441
437
// ```
438
+ // Or, on 16 bit platforms:
439
+ // ```
440
+ // Piece::num(0xE000),
441
+ // Piece::num(0x0020),
442
+ // Piece::num(0x0000),
443
+ // Piece::num(0x0000),
444
+ // ```
442
445
443
446
let bits = make_format_spec ( p, & mut argmap) ;
444
447
@@ -455,13 +458,22 @@ fn expand_format_args<'hir>(
455
458
}
456
459
457
460
if ctx. tcx . sess . target . pointer_width >= 64 {
458
- let bits = ctx. expr_u64 ( fmt . span , bits) ;
461
+ let bits = ctx. expr_usize ( macsp , bits) ;
459
462
pieces. push ( make_piece ( ctx, sym:: num, bits, macsp) ) ;
460
- } else {
461
- let high = ctx. expr_u32 ( fmt . span , ( bits >> 32 ) as u32 ) ;
462
- let low = ctx. expr_u32 ( fmt . span , bits as u32 ) ;
463
+ } else if ctx . tcx . sess . target . pointer_width >= 32 {
464
+ let high = ctx. expr_usize ( macsp , bits >> 32 ) ;
465
+ let low = ctx. expr_usize ( macsp , bits & 0xFFFF_FFFF ) ;
463
466
pieces. push ( make_piece ( ctx, sym:: num, high, macsp) ) ;
464
467
pieces. push ( make_piece ( ctx, sym:: num, low, macsp) ) ;
468
+ } else {
469
+ let w1 = ctx. expr_usize ( macsp, bits >> 48 ) ;
470
+ let w2 = ctx. expr_usize ( macsp, bits >> 32 & 0xFFFF ) ;
471
+ let w3 = ctx. expr_usize ( macsp, bits >> 16 & 0xFFFF ) ;
472
+ let w4 = ctx. expr_usize ( macsp, bits & 0xFFFF ) ;
473
+ pieces. push ( make_piece ( ctx, sym:: num, w1, macsp) ) ;
474
+ pieces. push ( make_piece ( ctx, sym:: num, w2, macsp) ) ;
475
+ pieces. push ( make_piece ( ctx, sym:: num, w3, macsp) ) ;
476
+ pieces. push ( make_piece ( ctx, sym:: num, w4, macsp) ) ;
465
477
}
466
478
467
479
implicit_arg_index = ( bits & 0x3FF ) + 1 ;
@@ -476,11 +488,7 @@ fn expand_format_args<'hir>(
476
488
// ```
477
489
// Piece::num(0),
478
490
// ```
479
- let zero = if ctx. tcx . sess . target . pointer_width >= 64 {
480
- ctx. expr_u64 ( fmt. span , 0 )
481
- } else {
482
- ctx. expr_u32 ( fmt. span , 0 )
483
- } ;
491
+ let zero = ctx. expr_usize ( macsp, 0 ) ;
484
492
pieces. push ( make_piece ( ctx, sym:: num, zero, macsp) ) ;
485
493
486
494
// ```
@@ -565,7 +573,7 @@ fn expand_format_args<'hir>(
565
573
let elements =
566
574
ctx. arena . alloc_from_iter ( argmap. iter ( ) . map ( |( & ( arg_index, ty) , placeholder_span) | {
567
575
if let ArgumentType :: Constant ( c) = ty {
568
- let arg = ctx. arena . alloc ( ctx. expr_usize ( macsp, c) ) ;
576
+ let arg = ctx. arena . alloc ( ctx. expr_usize ( macsp, c. into ( ) ) ) ;
569
577
let arg = ctx. arena . alloc ( ctx. expr (
570
578
macsp,
571
579
hir:: ExprKind :: AddrOf ( hir:: BorrowKind :: Ref , hir:: Mutability :: Not , arg) ,
@@ -609,7 +617,7 @@ fn expand_format_args<'hir>(
609
617
let args = ctx. arena . alloc_from_iter ( argmap. iter ( ) . map (
610
618
|( & ( arg_index, ty) , & placeholder_span) | {
611
619
if let ArgumentType :: Constant ( c) = ty {
612
- let arg = ctx. arena . alloc ( ctx. expr_usize ( macsp, c) ) ;
620
+ let arg = ctx. arena . alloc ( ctx. expr_usize ( macsp, c. into ( ) ) ) ;
613
621
let arg = ctx. arena . alloc ( ctx. expr (
614
622
macsp,
615
623
hir:: ExprKind :: AddrOf ( hir:: BorrowKind :: Ref , hir:: Mutability :: Not , arg) ,
0 commit comments