11use std:: iter;
22use std:: convert:: TryFrom ;
33
4+ use rustc_attr as attr;
45use rustc_ast:: ast:: FloatTy ;
56use rustc_middle:: { mir, ty} ;
7+ use rustc_middle:: ty:: layout:: IntegerExt ;
68use rustc_apfloat:: { Float , Round } ;
7- use rustc_target:: abi:: { Align , LayoutOf , Size } ;
9+ use rustc_target:: abi:: { Align , Integer , LayoutOf } ;
810
911use crate :: * ;
1012use helpers:: check_arg_count;
@@ -563,11 +565,11 @@ pub trait EvalContextExt<'mir, 'tcx: 'mir>: crate::MiriEvalContextExt<'mir, 'tcx
563565 Ok ( match dest_ty. kind {
564566 // Unsigned
565567 ty:: Uint ( t) => {
566- let width = t . bit_width ( ) . unwrap_or_else ( || this. pointer_size ( ) . bits ( ) ) ;
567- let res = f. to_u128 ( usize :: try_from ( width ) . unwrap ( ) ) ;
568+ let size = Integer :: from_attr ( this, attr :: IntType :: UnsignedInt ( t ) ) . size ( ) ;
569+ let res = f. to_u128 ( size . bits_usize ( ) ) ;
568570 if res. status . is_empty ( ) {
569571 // No status flags means there was no further rounding or other loss of precision.
570- Scalar :: from_uint ( res. value , Size :: from_bits ( width ) )
572+ Scalar :: from_uint ( res. value , size )
571573 } else {
572574 // `f` was not representable in this integer type.
573575 throw_ub_format ! (
@@ -578,11 +580,11 @@ pub trait EvalContextExt<'mir, 'tcx: 'mir>: crate::MiriEvalContextExt<'mir, 'tcx
578580 }
579581 // Signed
580582 ty:: Int ( t) => {
581- let width = t . bit_width ( ) . unwrap_or_else ( || this. pointer_size ( ) . bits ( ) ) ;
582- let res = f. to_i128 ( usize :: try_from ( width ) . unwrap ( ) ) ;
583+ let size = Integer :: from_attr ( this, attr :: IntType :: SignedInt ( t ) ) . size ( ) ;
584+ let res = f. to_i128 ( size . bits_usize ( ) ) ;
583585 if res. status . is_empty ( ) {
584586 // No status flags means there was no further rounding or other loss of precision.
585- Scalar :: from_int ( res. value , Size :: from_bits ( width ) )
587+ Scalar :: from_int ( res. value , size )
586588 } else {
587589 // `f` was not representable in this integer type.
588590 throw_ub_format ! (
0 commit comments