| ... | @@ -13744,20 +13744,19 @@ static Error ir_read_const_ptr(IrAnalyze *ira, AstNode *source_node, | ... | @@ -13744,20 +13744,19 @@ static Error ir_read_const_ptr(IrAnalyze *ira, AstNode *source_node, |
| 13744 | if (array_val->data.x_array.special != ConstArraySpecialNone) | 13744 | if (array_val->data.x_array.special != ConstArraySpecialNone) |
| 13745 | zig_panic("TODO"); | 13745 | zig_panic("TODO"); |
| 13746 | size_t elem_size = src_size; | 13746 | size_t elem_size = src_size; |
| 13747 | src_size = elem_size * | 13747 | size_t elem_index = ptr_val->data.x_ptr.data.base_array.elem_index; |
| 13748 | (array_val->type->data.array.len - ptr_val->data.x_ptr.data.base_array.elem_index); | 13748 | src_size = elem_size * (array_val->type->data.array.len - elem_index); |
| 13749 | if (dst_size > src_size) { | 13749 | if (dst_size > src_size) { |
| 13750 | ir_add_error_node(ira, source_node, | 13750 | ir_add_error_node(ira, source_node, |
| 13751 | buf_sprintf("attempt to read %zu bytes from %s at index %" ZIG_PRI_usize " which is %zu bytes", | 13751 | buf_sprintf("attempt to read %zu bytes from %s at index %" ZIG_PRI_usize " which is %zu bytes", |
| 13752 | dst_size, buf_ptr(&array_val->type->name), ptr_val->data.x_ptr.data.base_array.elem_index, | 13752 | dst_size, buf_ptr(&array_val->type->name), elem_index, src_size)); |
| 13753 | src_size)); | | |
| 13754 | return ErrorSemanticAnalyzeFail; | 13753 | return ErrorSemanticAnalyzeFail; |
| 13755 | } | 13754 | } |
| 13756 | size_t elem_count = (dst_size % elem_size == 0) ? (dst_size / elem_size) : (dst_size / elem_size + 1); | 13755 | size_t elem_count = (dst_size % elem_size == 0) ? (dst_size / elem_size) : (dst_size / elem_size + 1); |
| 13757 | Buf buf = BUF_INIT; | 13756 | Buf buf = BUF_INIT; |
| 13758 | buf_resize(&buf, elem_count * elem_size); | 13757 | buf_resize(&buf, elem_count * elem_size); |
| 13759 | for (size_t i = 0; i < elem_count; i += 1) { | 13758 | for (size_t i = 0; i < elem_count; i += 1) { |
| 13760 | ConstExprValue *elem_val = &array_val->data.x_array.data.s_none.elements[i]; | 13759 | ConstExprValue *elem_val = &array_val->data.x_array.data.s_none.elements[elem_index + i]; |
| 13761 | buf_write_value_bytes(ira->codegen, (uint8_t*)buf_ptr(&buf) + (i * elem_size), elem_val); | 13760 | buf_write_value_bytes(ira->codegen, (uint8_t*)buf_ptr(&buf) + (i * elem_size), elem_val); |
| 13762 | } | 13761 | } |
| 13763 | buf_read_value_bytes(ira->codegen, (uint8_t*)buf_ptr(&buf), out_val); | 13762 | buf_read_value_bytes(ira->codegen, (uint8_t*)buf_ptr(&buf), out_val); |