@@ -417,11 +417,7 @@ fn expand_format_args<'hir>(
417417 // ```
418418 // Piece::num(4),
419419 // ```
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 ) ;
425421 pieces. push ( make_piece ( ctx, sym:: num, i, macsp) ) ;
426422
427423 // ```
@@ -434,11 +430,18 @@ fn expand_format_args<'hir>(
434430 // ```
435431 // Piece::num(0xE000_0020_0000_0000),
436432 // ```
437- // Or, on <64 bit platforms:
433+ // Or, on 32 bit platforms:
438434 // ```
439435 // Piece::num(0xE000_0020),
440436 // Piece::num(0x0000_0000),
441437 // ```
438+ // Or, on 16 bit platforms:
439+ // ```
440+ // Piece::num(0xE000),
441+ // Piece::num(0x0020),
442+ // Piece::num(0x0000),
443+ // Piece::num(0x0000),
444+ // ```
442445
443446 let bits = make_format_spec ( p, & mut argmap) ;
444447
@@ -455,13 +458,22 @@ fn expand_format_args<'hir>(
455458 }
456459
457460 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) ;
459462 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 ) ;
463466 pieces. push ( make_piece ( ctx, sym:: num, high, macsp) ) ;
464467 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) ) ;
465477 }
466478
467479 implicit_arg_index = ( bits & 0x3FF ) + 1 ;
@@ -476,11 +488,7 @@ fn expand_format_args<'hir>(
476488 // ```
477489 // Piece::num(0),
478490 // ```
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 ) ;
484492 pieces. push ( make_piece ( ctx, sym:: num, zero, macsp) ) ;
485493
486494 // ```
@@ -565,7 +573,7 @@ fn expand_format_args<'hir>(
565573 let elements =
566574 ctx. arena . alloc_from_iter ( argmap. iter ( ) . map ( |( & ( arg_index, ty) , placeholder_span) | {
567575 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 ( ) ) ) ;
569577 let arg = ctx. arena . alloc ( ctx. expr (
570578 macsp,
571579 hir:: ExprKind :: AddrOf ( hir:: BorrowKind :: Ref , hir:: Mutability :: Not , arg) ,
@@ -609,7 +617,7 @@ fn expand_format_args<'hir>(
609617 let args = ctx. arena . alloc_from_iter ( argmap. iter ( ) . map (
610618 |( & ( arg_index, ty) , & placeholder_span) | {
611619 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 ( ) ) ) ;
613621 let arg = ctx. arena . alloc ( ctx. expr (
614622 macsp,
615623 hir:: ExprKind :: AddrOf ( hir:: BorrowKind :: Ref , hir:: Mutability :: Not , arg) ,
0 commit comments