| ... | @@ -25520,7 +25520,19 @@ fn elemVal( | ... | @@ -25520,7 +25520,19 @@ fn elemVal( |
| 25520 | return block.addBinOp(.ptr_elem_val, indexable, elem_index); | 25520 | return block.addBinOp(.ptr_elem_val, indexable, elem_index); |
| 25521 | }, | 25521 | }, |
| 25522 | .One => { | 25522 | .One => { |
| 25523 | assert(indexable_ty.childType(mod).zigTypeTag(mod) == .Array); // Guaranteed by checkIndexable | 25523 | const array_ty = indexable_ty.childType(mod); // Guaranteed by checkIndexable |
| | 25524 | assert(array_ty.zigTypeTag(mod) == .Array); |
| | 25525 | |
| | 25526 | if (array_ty.sentinel(mod)) |sentinel| { |
| | 25527 | // index must be defined since it can access out of bounds |
| | 25528 | if (try sema.resolveDefinedValue(block, elem_index_src, elem_index)) |index_val| { |
| | 25529 | const index = @intCast(usize, index_val.toUnsignedInt(mod)); |
| | 25530 | if (index == array_ty.arrayLen(mod)) { |
| | 25531 | return sema.addConstant(array_ty.childType(mod), sentinel); |
| | 25532 | } |
| | 25533 | } |
| | 25534 | } |
| | 25535 | |
| 25524 | const elem_ptr = try sema.elemPtr(block, indexable_src, indexable, elem_index, elem_index_src, false, oob_safety); | 25536 | const elem_ptr = try sema.elemPtr(block, indexable_src, indexable, elem_index, elem_index_src, false, oob_safety); |
| 25525 | return sema.analyzeLoad(block, indexable_src, elem_ptr, elem_index_src); | 25537 | return sema.analyzeLoad(block, indexable_src, elem_ptr, elem_index_src); |
| 25526 | }, | 25538 | }, |