diff --git a/src/Sema.zig b/src/Sema.zig index 40ac0f958c..abd010a94b 100644 --- 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); },