diff options
| author | Mitchell Hashimoto <mitchell.hashimoto@gmail.com> | 2022-03-08 09:23:30 -0800 |
|---|---|---|
| committer | Andrew Kelley <andrew@ziglang.org> | 2022-03-08 14:10:43 -0500 |
| commit | 55ccf4c7a8451edca47d8d6d82bddd9fe192744a (patch) | |
| tree | 9fd1bb8ed2c124c3162ba6f400b3af834d9b0892 /src/Sema.zig | |
| parent | 6ffa44554ef70dea9e4e58e0c8a4733be7c939b3 (diff) | |
| download | zig-55ccf4c7a8451edca47d8d6d82bddd9fe192744a.tar.gz zig-55ccf4c7a8451edca47d8d6d82bddd9fe192744a.zip | |
stage2: elem vals of many pointers need not deref pointers
By the time zirElemVal is reached for a many pointer, a load has already
happened, making sure the operand is already dereferenced.
This makes `mem.sliceTo` now work.
Diffstat (limited to 'src/Sema.zig')
| -rw-r--r-- | src/Sema.zig | 6 |
1 files changed, 2 insertions, 4 deletions
diff --git a/src/Sema.zig b/src/Sema.zig index 0a90101c8a..249e3be34d 100644 --- a/src/Sema.zig +++ b/src/Sema.zig @@ -15629,15 +15629,13 @@ fn elemVal( return block.addBinOp(.slice_elem_val, array, elem_index); }, .Many, .C => { - const maybe_ptr_val = try sema.resolveDefinedValue(block, array_src, array); + const maybe_array_val = try sema.resolveDefinedValue(block, array_src, array); const maybe_index_val = try sema.resolveDefinedValue(block, elem_index_src, elem_index); const runtime_src = rs: { - const ptr_val = maybe_ptr_val orelse break :rs array_src; + const array_val = maybe_array_val orelse break :rs array_src; const index_val = maybe_index_val orelse break :rs elem_index_src; const index = @intCast(usize, index_val.toUnsignedInt()); - const maybe_array_val = try sema.pointerDeref(block, array_src, ptr_val, array_ty); - const array_val = maybe_array_val orelse break :rs array_src; const elem_val = try array_val.elemValue(sema.arena, index); return sema.addConstant(array_ty.elemType2(), elem_val); }; |
