@@ -145,21 +145,17 @@ impl<'a, 'mir, 'tcx> EvalContextExt<'tcx> for EvalContext<'a, 'mir, 'tcx, super:
145
145
let elem_layout = self . layout_of ( elem_ty) ?;
146
146
let elem_size = elem_layout. size . bytes ( ) ;
147
147
let count = self . read_scalar ( args[ 2 ] ) ?. to_usize ( & self ) ?;
148
- if count * elem_size != 0 {
149
- // TODO: We do not even validate alignment for the 0-bytes case. libstd relies on this in vec::IntoIter::next.
150
- // Also see the write_bytes intrinsic.
151
- let elem_align = elem_layout. align ;
152
- let src = self . read_scalar ( args[ 0 ] ) ?. not_undef ( ) ?;
153
- let dest = self . read_scalar ( args[ 1 ] ) ?. not_undef ( ) ?;
154
- self . memory . copy (
155
- src,
156
- elem_align,
157
- dest,
158
- elem_align,
159
- Size :: from_bytes ( count * elem_size) ,
160
- intrinsic_name. ends_with ( "_nonoverlapping" ) ,
161
- ) ?;
162
- }
148
+ let elem_align = elem_layout. align ;
149
+ let src = self . read_scalar ( args[ 0 ] ) ?. not_undef ( ) ?;
150
+ let dest = self . read_scalar ( args[ 1 ] ) ?. not_undef ( ) ?;
151
+ self . memory . copy (
152
+ src,
153
+ elem_align,
154
+ dest,
155
+ elem_align,
156
+ Size :: from_bytes ( count * elem_size) ,
157
+ intrinsic_name. ends_with ( "_nonoverlapping" ) ,
158
+ ) ?;
163
159
}
164
160
165
161
"discriminant_value" => {
@@ -436,12 +432,8 @@ impl<'a, 'mir, 'tcx> EvalContextExt<'tcx> for EvalContext<'a, 'mir, 'tcx, super:
436
432
let val_byte = self . read_scalar ( args[ 1 ] ) ?. to_u8 ( ) ?;
437
433
let ptr = self . read_scalar ( args[ 0 ] ) ?. not_undef ( ) ?;
438
434
let count = self . read_scalar ( args[ 2 ] ) ?. to_usize ( & self ) ?;
439
- if count > 0 {
440
- // HashMap relies on write_bytes on a NULL ptr with count == 0 to work
441
- // TODO: Should we, at least, validate the alignment? (Also see the copy intrinsic)
442
- self . memory . check_align ( ptr, ty_layout. align ) ?;
443
- self . memory . write_repeat ( ptr, val_byte, ty_layout. size * count) ?;
444
- }
435
+ self . memory . check_align ( ptr, ty_layout. align ) ?;
436
+ self . memory . write_repeat ( ptr, val_byte, ty_layout. size * count) ?;
445
437
}
446
438
447
439
name => return err ! ( Unimplemented ( format!( "unimplemented intrinsic: {}" , name) ) ) ,
0 commit comments