zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

commit 71a9b35c0f853a4af49470f83763578eb4cf06e0 (tree)
parent 9abc3232a8c02f0fc6bef6ad0bad56a3804e6bc3
Author: Andrew Kelley <andrew@ziglang.org>
Date:   Mon, 21 Jul 2025 15:34:57 -0700

Sema: fix missed pointer access OPV

Diffstat:
Msrc/Sema.zig | 6+++++-
1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/src/Sema.zig b/src/Sema.zig @@ -28214,12 +28214,12 @@ fn elemVal( .many, .c => { const maybe_indexable_val = try sema.resolveDefinedValue(block, indexable_src, indexable); const maybe_index_val = try sema.resolveDefinedValue(block, elem_index_src, elem_index); + const elem_ty = indexable_ty.elemType2(zcu); ct: { const indexable_val = maybe_indexable_val orelse break :ct; const index_val = maybe_index_val orelse break :ct; const index: usize = @intCast(try index_val.toUnsignedIntSema(pt)); - const elem_ty = indexable_ty.elemType2(zcu); const many_ptr_ty = try pt.manyConstPtrType(elem_ty); const many_ptr_val = try pt.getCoerced(indexable_val, many_ptr_ty); const elem_ptr_ty = try pt.singleConstPtrType(elem_ty); @@ -28228,6 +28228,10 @@ fn elemVal( return Air.internedToRef((try pt.getCoerced(elem_val, elem_ty)).toIntern()); } + if (try sema.typeHasOnePossibleValue(elem_ty)) |elem_only_value| { + return Air.internedToRef(elem_only_value.toIntern()); + } + try sema.checkLogicalPtrOperation(block, src, indexable_ty); return block.addBinOp(.ptr_elem_val, indexable, elem_index); },