]> git.lizzy.rs Git - rust.git/commitdiff
write_bytes(): fix handling of types that are larger than u128
authorDavid Renshaw <david@sandstorm.io>
Tue, 14 Mar 2017 00:32:43 +0000 (20:32 -0400)
committerDavid Renshaw <david@sandstorm.io>
Tue, 14 Mar 2017 00:32:43 +0000 (20:32 -0400)
src/terminator/intrinsic.rs

index 9c7489d145c3508c8c05640d9b5fd3efcb786e3c..56d097289bcb55c1bc424d68b0b68e6fa4fe8f22 100644 (file)
@@ -406,18 +406,11 @@ pub(super) fn call_intrinsic(
                 let u8 = self.tcx.types.u8;
                 let ty = substs.type_at(0);
                 let size = self.type_size(ty)?.expect("write_bytes() type must be sized");
-                let val_byte = self.value_to_primval(arg_vals[1], u8)?.to_u128()?;
-                let mut pattern: u128 = 0;
-                for ii in 0..size {
-                    pattern |= val_byte << (8 * ii);
-                }
-                let val_full = Value::ByVal(PrimVal::from_u128(pattern));
                 let mut ptr = arg_vals[0].read_ptr(&self.memory)?;
-
                 let count = self.value_to_primval(arg_vals[2], usize)?.to_u64()?;
-                for _ in 0..count {
-                    self.write_value_to_ptr(val_full, ptr, ty)?;
-                    ptr = ptr.offset(size);
+                for _ in 0..(count * size) {
+                    self.write_value_to_ptr(arg_vals[1], ptr, u8)?;
+                    ptr = ptr.offset(1);
                 }
             }