@@ -109,12 +109,10 @@ impl<Tag: fmt::Debug, Id: fmt::Debug> fmt::Debug for Scalar<Tag, Id> {
109
109
Scalar :: Ptr ( ptr) =>
110
110
write ! ( f, "{:?}" , ptr) ,
111
111
& Scalar :: Raw { data, size } => {
112
+ Scalar :: check_data ( data, size) ;
112
113
if size == 0 {
113
- assert_eq ! ( data, 0 , "ZST value must be 0" ) ;
114
114
write ! ( f, "<ZST>" )
115
115
} else {
116
- assert_eq ! ( truncate( data, Size :: from_bytes( size as u64 ) ) , data,
117
- "Scalar value {:#x} exceeds size of {} bytes" , data, size) ;
118
116
// Format as hex number wide enough to fit any value of the given `size`.
119
117
// So data=20, size=1 will be "0x14", but with size=4 it'll be "0x00000014".
120
118
write ! ( f, "0x{:>0width$x}" , data, width=( size* 2 ) as usize )
@@ -134,6 +132,12 @@ impl<Tag> fmt::Display for Scalar<Tag> {
134
132
}
135
133
136
134
impl < ' tcx > Scalar < ( ) > {
135
+ #[ inline]
136
+ fn check_data ( data : u128 , size : u8 ) {
137
+ assert_eq ! ( truncate( data, Size :: from_bytes( size as u64 ) ) , data,
138
+ "Scalar value {:#x} exceeds size of {} bytes" , data, size) ;
139
+ }
140
+
137
141
#[ inline]
138
142
pub fn with_tag < Tag > ( self , new_tag : Tag ) -> Scalar < Tag > {
139
143
match self {
@@ -269,8 +273,10 @@ impl<'tcx, Tag> Scalar<Tag> {
269
273
#[ inline]
270
274
pub fn from_uint ( i : impl Into < u128 > , size : Size ) -> Self {
271
275
let i = i. into ( ) ;
272
- assert_eq ! ( truncate( i, size) , i,
273
- "Unsigned value {} does not fit in {} bits" , i, size. bits( ) ) ;
276
+ debug_assert_eq ! (
277
+ truncate( i, size) , i,
278
+ "Unsigned value {:#x} does not fit in {} bits" , i, size. bits( )
279
+ ) ;
274
280
Scalar :: Raw { data : i, size : size. bytes ( ) as u8 }
275
281
}
276
282
@@ -279,8 +285,10 @@ impl<'tcx, Tag> Scalar<Tag> {
279
285
let i = i. into ( ) ;
280
286
// `into` performed sign extension, we have to truncate
281
287
let truncated = truncate ( i as u128 , size) ;
282
- assert_eq ! ( sign_extend( truncated, size) as i128 , i,
283
- "Signed value {} does not fit in {} bits" , i, size. bits( ) ) ;
288
+ debug_assert_eq ! (
289
+ sign_extend( truncated, size) as i128 , i,
290
+ "Signed value {:#x} does not fit in {} bits" , i, size. bits( )
291
+ ) ;
284
292
Scalar :: Raw { data : truncated, size : size. bytes ( ) as u8 }
285
293
}
286
294
@@ -303,9 +311,8 @@ impl<'tcx, Tag> Scalar<Tag> {
303
311
match self {
304
312
Scalar :: Raw { data, size } => {
305
313
assert_eq ! ( target_size. bytes( ) , size as u64 ) ;
306
- assert_ne ! ( size, 0 , "to_bits cannot be used with zsts" ) ;
307
- assert_eq ! ( truncate( data, target_size) , data,
308
- "Scalar value {:#x} exceeds size of {} bytes" , data, size) ;
314
+ assert_ne ! ( size, 0 , "you should never look at the bits of a ZST" ) ;
315
+ Scalar :: check_data ( data, size) ;
309
316
Ok ( data)
310
317
}
311
318
Scalar :: Ptr ( ptr) => {
@@ -320,9 +327,8 @@ impl<'tcx, Tag> Scalar<Tag> {
320
327
match self {
321
328
Scalar :: Raw { data, size } => {
322
329
assert_eq ! ( target_size. bytes( ) , size as u64 ) ;
323
- assert_ne ! ( size, 0 , "to_bits cannot be used with zsts" ) ;
324
- assert_eq ! ( truncate( data, target_size) , data,
325
- "Scalar value {:#x} exceeds size of {} bytes" , data, size) ;
330
+ assert_ne ! ( size, 0 , "you should never look at the bits of a ZST" ) ;
331
+ Scalar :: check_data ( data, size) ;
326
332
Ok ( data)
327
333
}
328
334
Scalar :: Ptr ( _) => err ! ( ReadPointerAsBytes ) ,
0 commit comments