Skip to content

Commit 5483806

Browse files
authored
Merge pull request #168 from dwrensha/allocate-zeroed
implement __rust_allocate_zeroed C ABI function
2 parents 8950b12 + 0641e93 commit 5483806

File tree

2 files changed

+13
-0
lines changed

2 files changed

+13
-0
lines changed

src/terminator/mod.rs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -493,6 +493,14 @@ impl<'a, 'tcx> EvalContext<'a, 'tcx> {
493493
self.write_primval(dest, PrimVal::Ptr(ptr), dest_ty)?;
494494
}
495495

496+
"__rust_allocate_zeroed" => {
497+
let size = self.value_to_primval(args[0], usize)?.to_u64()?;
498+
let align = self.value_to_primval(args[1], usize)?.to_u64()?;
499+
let ptr = self.memory.allocate(size, align)?;
500+
self.memory.write_repeat(ptr, 0, size)?;
501+
self.write_primval(dest, PrimVal::Ptr(ptr), dest_ty)?;
502+
}
503+
496504
"__rust_deallocate" => {
497505
let ptr = args[0].read_ptr(&self.memory)?;
498506
// FIXME: insert sanity check for size and align?

tests/run-pass/vecs.rs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,10 @@ fn make_vec_macro_repeat() -> Vec<u8> {
1313
vec![42; 5]
1414
}
1515

16+
fn make_vec_macro_repeat_zeroed() -> Vec<u8> {
17+
vec![0; 7]
18+
}
19+
1620
fn vec_into_iter() -> u8 {
1721
vec![1, 2, 3, 4]
1822
.into_iter()
@@ -34,4 +38,5 @@ fn main() {
3438
assert_eq!(make_vec().capacity(), 4);
3539
assert_eq!(make_vec_macro(), [1, 2]);
3640
assert_eq!(make_vec_macro_repeat(), [42; 5]);
41+
assert_eq!(make_vec_macro_repeat_zeroed(), [0; 7]);
3742
}

0 commit comments

Comments
 (0)