@@ -96,40 +96,40 @@ pub struct ImmTy<'tcx, Tag = ()> {
9696impl < Tag : Copy > std:: fmt:: Display for ImmTy < ' tcx , Tag > {
9797 fn fmt ( & self , fmt : & mut std:: fmt:: Formatter < ' _ > ) -> std:: fmt:: Result {
9898 match & self . imm {
99- Immediate :: Scalar ( ScalarMaybeUndef :: Scalar ( s) ) => match s. to_bits ( self . layout . size ) {
100- Ok ( s) => {
101- match self . layout . ty . kind {
102- ty:: Int ( _) => {
103- return write ! (
104- fmt,
105- "{}" ,
106- super :: sign_extend( s, self . layout. size) as i128 ,
107- ) ;
108- }
109- ty:: Uint ( _) => return write ! ( fmt, "{}" , s) ,
110- ty:: Bool if s == 0 => return fmt. write_str ( "false" ) ,
111- ty:: Bool if s == 1 => return fmt. write_str ( "true" ) ,
112- ty:: Char => {
113- if let Some ( c) = u32:: try_from ( s) . ok ( ) . and_then ( std:: char:: from_u32) {
114- return write ! ( fmt, "{}" , c) ;
115- }
99+ // We cannot use `to_bits_or_ptr` as we do not have a `tcx`.
100+ // So we use `is_bits` and circumvent a bunch of sanity checking -- but
101+ // this is anyway only for printing.
102+ Immediate :: Scalar ( ScalarMaybeUndef :: Scalar ( s) ) if s. is_ptr ( ) => {
103+ fmt. write_str ( "{pointer}" )
104+ }
105+ Immediate :: Scalar ( ScalarMaybeUndef :: Scalar ( s) ) => {
106+ let s = s. assert_bits ( self . layout . size ) ;
107+ match self . layout . ty . kind {
108+ ty:: Int ( _) => {
109+ return write ! ( fmt, "{}" , super :: sign_extend( s, self . layout. size) as i128 , ) ;
110+ }
111+ ty:: Uint ( _) => return write ! ( fmt, "{}" , s) ,
112+ ty:: Bool if s == 0 => return fmt. write_str ( "false" ) ,
113+ ty:: Bool if s == 1 => return fmt. write_str ( "true" ) ,
114+ ty:: Char => {
115+ if let Some ( c) = u32:: try_from ( s) . ok ( ) . and_then ( std:: char:: from_u32) {
116+ return write ! ( fmt, "{}" , c) ;
116117 }
117- ty :: Float ( ast :: FloatTy :: F32 ) => {
118- if let Ok ( u ) = u32 :: try_from ( s ) {
119- return write ! ( fmt , "{}" , f32 :: from_bits ( u ) ) ;
120- }
118+ }
119+ ty :: Float ( ast :: FloatTy :: F32 ) => {
120+ if let Ok ( u ) = u32 :: try_from ( s ) {
121+ return write ! ( fmt , "{}" , f32 :: from_bits ( u ) ) ;
121122 }
122- ty :: Float ( ast :: FloatTy :: F64 ) => {
123- if let Ok ( u ) = u64 :: try_from ( s ) {
124- return write ! ( fmt , "{}" , f64 :: from_bits ( u ) ) ;
125- }
123+ }
124+ ty :: Float ( ast :: FloatTy :: F64 ) => {
125+ if let Ok ( u ) = u64 :: try_from ( s ) {
126+ return write ! ( fmt , "{}" , f64 :: from_bits ( u ) ) ;
126127 }
127- _ => { }
128128 }
129- write ! ( fmt , "{:x}" , s )
129+ _ => { }
130130 }
131- Err ( _ ) => fmt. write_str ( "{pointer}" ) ,
132- } ,
131+ write ! ( fmt, "{:x}" , s )
132+ }
133133 Immediate :: Scalar ( ScalarMaybeUndef :: Undef ) => fmt. write_str ( "{undef}" ) ,
134134 Immediate :: ScalarPair ( ..) => fmt. write_str ( "{wide pointer or tuple}" ) ,
135135 }
@@ -205,11 +205,6 @@ impl<'tcx, Tag: Copy> ImmTy<'tcx, Tag> {
205205 pub fn from_int ( i : impl Into < i128 > , layout : TyLayout < ' tcx > ) -> Self {
206206 Self :: from_scalar ( Scalar :: from_int ( i, layout. size ) , layout)
207207 }
208-
209- #[ inline]
210- pub fn to_bits ( self ) -> InterpResult < ' tcx , u128 > {
211- self . to_scalar ( ) ?. to_bits ( self . layout . size )
212- }
213208}
214209
215210// Use the existing layout if given (but sanity check in debug mode),
0 commit comments