diff --git a/vlib/builtin/array.v b/vlib/builtin/array.v index 8ae7c9aa9c..45ea87831f 100644 --- a/vlib/builtin/array.v +++ b/vlib/builtin/array.v @@ -549,6 +549,7 @@ pub fn (mut a array) shift() voidptr { unsafe { a.data = &u8(a.data) + u64(a.element_size) } + a.offset += a.element_size a.len-- a.cap-- return first_elem diff --git a/vlib/builtin/array_d_gcboehm_opt.v b/vlib/builtin/array_d_gcboehm_opt.v index b6422e79ac..b660fe1e05 100644 --- a/vlib/builtin/array_d_gcboehm_opt.v +++ b/vlib/builtin/array_d_gcboehm_opt.v @@ -125,6 +125,7 @@ fn (mut a array) ensure_cap_noscan(required int) { unsafe { vmemcpy(new_data, a.data, u64(a.len) * u64(a.element_size)) } // TODO: the old data may be leaked when no GC is used (ref-counting?) } + a.offset += a.element_size a.data = new_data a.offset = 0 a.cap = int(cap)