authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2025-07-21 15:34:57-07:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2025-07-21 15:34:57-07:00
log71a9b35c0f853a4af49470f83763578eb4cf06e0
treef877bf5d5043e6456992fe71423f584a6b124eba
parent9abc3232a8c02f0fc6bef6ad0bad56a3804e6bc3

Sema: fix missed pointer access OPV


1 files changed, 5 insertions(+), 1 deletions(-)

src/Sema.zig+5-1
...@@ -28214,12 +28214,12 @@ fn elemVal(...@@ -28214,12 +28214,12 @@ fn elemVal(
28214 .many, .c => {28214 .many, .c => {
28215 const maybe_indexable_val = try sema.resolveDefinedValue(block, indexable_src, indexable);28215 const maybe_indexable_val = try sema.resolveDefinedValue(block, indexable_src, indexable);
28216 const maybe_index_val = try sema.resolveDefinedValue(block, elem_index_src, elem_index);28216 const maybe_index_val = try sema.resolveDefinedValue(block, elem_index_src, elem_index);
28217 const elem_ty = indexable_ty.elemType2(zcu);
2821728218
28218 ct: {28219 ct: {
28219 const indexable_val = maybe_indexable_val orelse break :ct;28220 const indexable_val = maybe_indexable_val orelse break :ct;
28220 const index_val = maybe_index_val orelse break :ct;28221 const index_val = maybe_index_val orelse break :ct;
28221 const index: usize = @intCast(try index_val.toUnsignedIntSema(pt));28222 const index: usize = @intCast(try index_val.toUnsignedIntSema(pt));
28222 const elem_ty = indexable_ty.elemType2(zcu);
28223 const many_ptr_ty = try pt.manyConstPtrType(elem_ty);28223 const many_ptr_ty = try pt.manyConstPtrType(elem_ty);
28224 const many_ptr_val = try pt.getCoerced(indexable_val, many_ptr_ty);28224 const many_ptr_val = try pt.getCoerced(indexable_val, many_ptr_ty);
28225 const elem_ptr_ty = try pt.singleConstPtrType(elem_ty);28225 const elem_ptr_ty = try pt.singleConstPtrType(elem_ty);
...@@ -28228,6 +28228,10 @@ fn elemVal(...@@ -28228,6 +28228,10 @@ fn elemVal(
28228 return Air.internedToRef((try pt.getCoerced(elem_val, elem_ty)).toIntern());28228 return Air.internedToRef((try pt.getCoerced(elem_val, elem_ty)).toIntern());
28229 }28229 }
2823028230
28231 if (try sema.typeHasOnePossibleValue(elem_ty)) |elem_only_value| {
28232 return Air.internedToRef(elem_only_value.toIntern());
28233 }
28234
28231 try sema.checkLogicalPtrOperation(block, src, indexable_ty);28235 try sema.checkLogicalPtrOperation(block, src, indexable_ty);
28232 return block.addBinOp(.ptr_elem_val, indexable, elem_index);28236 return block.addBinOp(.ptr_elem_val, indexable, elem_index);
28233 },28237 },