| ... | ... | @@ -18585,12 +18585,27 @@ static IrInstruction *ir_analyze_instruction_elem_ptr(IrAnalyze *ira, IrInstruct |
| 18585 | 18585 | case ConstPtrSpecialDiscard: |
| 18586 | 18586 | zig_unreachable(); |
| 18587 | 18587 | case ConstPtrSpecialRef: |
| 18588 | | mem_size = 1; |
| 18589 | | old_size = 1; |
| 18590 | | new_index = index; |
| 18588 | if (array_ptr_val->data.x_ptr.data.ref.pointee->type->id == ZigTypeIdArray) { |
| 18589 | ConstExprValue *array_val = array_ptr_val->data.x_ptr.data.ref.pointee; |
| 18590 | new_index = index; |
| 18591 | ZigType *array_type = array_val->type; |
| 18592 | mem_size = array_type->data.array.len; |
| 18593 | if (array_type->data.array.sentinel != nullptr) { |
| 18594 | mem_size += 1; |
| 18595 | } |
| 18596 | old_size = mem_size; |
| 18591 | 18597 | |
| 18592 | | out_val->data.x_ptr.special = ConstPtrSpecialRef; |
| 18593 | | out_val->data.x_ptr.data.ref.pointee = array_ptr_val->data.x_ptr.data.ref.pointee; |
| 18598 | out_val->data.x_ptr.special = ConstPtrSpecialBaseArray; |
| 18599 | out_val->data.x_ptr.data.base_array.array_val = array_val; |
| 18600 | out_val->data.x_ptr.data.base_array.elem_index = new_index; |
| 18601 | } else { |
| 18602 | mem_size = 1; |
| 18603 | old_size = 1; |
| 18604 | new_index = index; |
| 18605 | |
| 18606 | out_val->data.x_ptr.special = ConstPtrSpecialRef; |
| 18607 | out_val->data.x_ptr.data.ref.pointee = array_ptr_val->data.x_ptr.data.ref.pointee; |
| 18608 | } |
| 18594 | 18609 | break; |
| 18595 | 18610 | case ConstPtrSpecialBaseArray: |
| 18596 | 18611 | { |