| ... | @@ -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); |
| 28217 | | 28218 | |
| 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 | } |
| 28230 | | 28230 | |
| | 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 | }, |