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:
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);
},