Skip to content

Commit 0bc5e7b

Browse files
committed
Sema: use elemPtrOneLayerOnly in zirMemCpy
Closes #15633
1 parent 2703db3 commit 0bc5e7b

File tree

2 files changed

+15
-2
lines changed

2 files changed

+15
-2
lines changed

src/Sema.zig

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22146,7 +22146,7 @@ fn zirMemcpy(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!void
2214622146
const len = try sema.usizeCast(block, dest_src, len_u64);
2214722147
for (0..len) |i| {
2214822148
const elem_index = try sema.addIntUnsigned(Type.usize, i);
22149-
const dest_elem_ptr = try sema.elemPtr(
22149+
const dest_elem_ptr = try sema.elemPtrOneLayerOnly(
2215022150
block,
2215122151
src,
2215222152
dest_ptr,
@@ -22155,7 +22155,7 @@ fn zirMemcpy(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!void
2215522155
true, // init
2215622156
false, // oob_safety
2215722157
);
22158-
const src_elem_ptr = try sema.elemPtr(
22158+
const src_elem_ptr = try sema.elemPtrOneLayerOnly(
2215922159
block,
2216022160
src,
2216122161
src_ptr,

test/behavior/memcpy.zig

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,3 +65,16 @@ fn testMemcpyDestManyPtr() !void {
6565
try expect(buf[3] == 'l');
6666
try expect(buf[4] == 'o');
6767
}
68+
69+
comptime {
70+
const S = struct {
71+
buffer: [8]u8 = undefined,
72+
fn set(self: *@This(), items: []const u8) void {
73+
@memcpy(self.buffer[0..items.len], items);
74+
}
75+
};
76+
77+
var s = S{};
78+
s.set("hello");
79+
if (!std.mem.eql(u8, s.buffer[0..5], "hello")) @compileError("bad");
80+
}

0 commit comments

Comments
 (0)