authorgravatar for git@vexu.euVeikka Tuominen <git@vexu.eu> 2023-05-14 15:24:26+03:00
committergravatar for git@vexu.euVeikka Tuominen <git@vexu.eu> 2023-05-15 10:31:24+03:00
log0bc5e7b5233acdc415e091c4a8c74433b7de2921
treeeb325dd6ebd4c9d4a1cb6936ff121629322cf709
parent2703db3b405b45e897231e85ba884543d684f64f

Sema: use `elemPtrOneLayerOnly` in `zirMemCpy`

Closes #15633

2 files changed, 15 insertions(+), 2 deletions(-)

src/Sema.zig+2-2
...@@ -22146,7 +22146,7 @@ fn zirMemcpy(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!void...@@ -22146,7 +22146,7 @@ fn zirMemcpy(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!void
22146 const len = try sema.usizeCast(block, dest_src, len_u64);22146 const len = try sema.usizeCast(block, dest_src, len_u64);
22147 for (0..len) |i| {22147 for (0..len) |i| {
22148 const elem_index = try sema.addIntUnsigned(Type.usize, i);22148 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(
22150 block,22150 block,
22151 src,22151 src,
22152 dest_ptr,22152 dest_ptr,
...@@ -22155,7 +22155,7 @@ fn zirMemcpy(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!void...@@ -22155,7 +22155,7 @@ fn zirMemcpy(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!void
22155 true, // init22155 true, // init
22156 false, // oob_safety22156 false, // oob_safety
22157 );22157 );
22158 const src_elem_ptr = try sema.elemPtr(22158 const src_elem_ptr = try sema.elemPtrOneLayerOnly(
22159 block,22159 block,
22160 src,22160 src,
22161 src_ptr,22161 src_ptr,
test/behavior/memcpy.zig+13
...@@ -65,3 +65,16 @@ fn testMemcpyDestManyPtr() !void {...@@ -65,3 +65,16 @@ fn testMemcpyDestManyPtr() !void {
65 try expect(buf[3] == 'l');65 try expect(buf[3] == 'l');
66 try expect(buf[4] == 'o');66 try expect(buf[4] == 'o');
67}67}
68
69comptime {
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}