| ... | @@ -159,9 +159,9 @@ static ZigType *ir_resolve_atomic_operand_type(IrAnalyze *ira, IrInstruction *op | ... | @@ -159,9 +159,9 @@ static ZigType *ir_resolve_atomic_operand_type(IrAnalyze *ira, IrInstruction *op |
| 159 | static IrInstruction *ir_lval_wrap(IrBuilder *irb, Scope *scope, IrInstruction *value, LVal lval); | 159 | static IrInstruction *ir_lval_wrap(IrBuilder *irb, Scope *scope, IrInstruction *value, LVal lval); |
| 160 | static ZigType *adjust_ptr_align(CodeGen *g, ZigType *ptr_type, uint32_t new_align); | 160 | static ZigType *adjust_ptr_align(CodeGen *g, ZigType *ptr_type, uint32_t new_align); |
| 161 | static ZigType *adjust_slice_align(CodeGen *g, ZigType *slice_type, uint32_t new_align); | 161 | static ZigType *adjust_slice_align(CodeGen *g, ZigType *slice_type, uint32_t new_align); |
| 162 | static Error buf_read_value_bytes(IrAnalyze *ira, AstNode *source_node, uint8_t *buf, ConstExprValue *val); | 162 | static Error buf_read_value_bytes(IrAnalyze *ira, CodeGen *codegen, AstNode *source_node, uint8_t *buf, ConstExprValue *val); |
| 163 | static void buf_write_value_bytes(CodeGen *codegen, uint8_t *buf, ConstExprValue *val); | 163 | static void buf_write_value_bytes(CodeGen *codegen, uint8_t *buf, ConstExprValue *val); |
| 164 | static Error ir_read_const_ptr(IrAnalyze *ira, AstNode *source_node, | 164 | static Error ir_read_const_ptr(IrAnalyze *ira, CodeGen *codegen, AstNode *source_node, |
| 165 | ConstExprValue *out_val, ConstExprValue *ptr_val); | 165 | ConstExprValue *out_val, ConstExprValue *ptr_val); |
| 166 | static IrInstruction *ir_analyze_ptr_cast(IrAnalyze *ira, IrInstruction *source_instr, IrInstruction *ptr, | 166 | static IrInstruction *ir_analyze_ptr_cast(IrAnalyze *ira, IrInstruction *source_instr, IrInstruction *ptr, |
| 167 | ZigType *dest_type, IrInstruction *dest_type_src); | 167 | ZigType *dest_type, IrInstruction *dest_type_src); |
| ... | @@ -7391,35 +7391,46 @@ static ErrorMsg *ir_add_error_node(IrAnalyze *ira, AstNode *source_node, Buf *ms | ... | @@ -7391,35 +7391,46 @@ static ErrorMsg *ir_add_error_node(IrAnalyze *ira, AstNode *source_node, Buf *ms |
| 7391 | return exec_add_error_node(ira->codegen, ira->new_irb.exec, source_node, msg); | 7391 | return exec_add_error_node(ira->codegen, ira->new_irb.exec, source_node, msg); |
| 7392 | } | 7392 | } |
| 7393 | | 7393 | |
| | 7394 | static ErrorMsg *opt_ir_add_error_node(IrAnalyze *ira, CodeGen *codegen, AstNode *source_node, Buf *msg) { |
| | 7395 | if (ira != nullptr) |
| | 7396 | return exec_add_error_node(codegen, ira->new_irb.exec, source_node, msg); |
| | 7397 | else |
| | 7398 | return add_node_error(codegen, source_node, msg); |
| | 7399 | } |
| | 7400 | |
| 7394 | static ErrorMsg *ir_add_error(IrAnalyze *ira, IrInstruction *source_instruction, Buf *msg) { | 7401 | static ErrorMsg *ir_add_error(IrAnalyze *ira, IrInstruction *source_instruction, Buf *msg) { |
| 7395 | return ir_add_error_node(ira, source_instruction->source_node, msg); | 7402 | return ir_add_error_node(ira, source_instruction->source_node, msg); |
| 7396 | } | 7403 | } |
| 7397 | | 7404 | |
| 7398 | // This function takes a comptime ptr and makes the child const value conform to the type | 7405 | // This function takes a comptime ptr and makes the child const value conform to the type |
| 7399 | // described by the pointer. | 7406 | // described by the pointer. |
| 7400 | static Error eval_comptime_ptr_reinterpret(IrAnalyze *ira, AstNode *source_node, ConstExprValue *ptr_val) { | 7407 | static Error eval_comptime_ptr_reinterpret(IrAnalyze *ira, CodeGen *codegen, AstNode *source_node, |
| | 7408 | ConstExprValue *ptr_val) |
| | 7409 | { |
| 7401 | Error err; | 7410 | Error err; |
| 7402 | assert(ptr_val->type->id == ZigTypeIdPointer); | 7411 | assert(ptr_val->type->id == ZigTypeIdPointer); |
| 7403 | ConstExprValue tmp = {}; | 7412 | ConstExprValue tmp = {}; |
| 7404 | tmp.special = ConstValSpecialStatic; | 7413 | tmp.special = ConstValSpecialStatic; |
| 7405 | tmp.type = ptr_val->type->data.pointer.child_type; | 7414 | tmp.type = ptr_val->type->data.pointer.child_type; |
| 7406 | if ((err = ir_read_const_ptr(ira, source_node, &tmp, ptr_val))) | 7415 | if ((err = ir_read_const_ptr(ira, codegen, source_node, &tmp, ptr_val))) |
| 7407 | return err; | 7416 | return err; |
| 7408 | ConstExprValue *child_val = const_ptr_pointee_unchecked(ira->codegen, ptr_val); | 7417 | ConstExprValue *child_val = const_ptr_pointee_unchecked(codegen, ptr_val); |
| 7409 | copy_const_val(child_val, &tmp, false); | 7418 | copy_const_val(child_val, &tmp, false); |
| 7410 | return ErrorNone; | 7419 | return ErrorNone; |
| 7411 | } | 7420 | } |
| 7412 | | 7421 | |
| 7413 | static ConstExprValue *ir_const_ptr_pointee(IrAnalyze *ira, ConstExprValue *const_val, AstNode *source_node) { | 7422 | ConstExprValue *const_ptr_pointee(IrAnalyze *ira, CodeGen *codegen, ConstExprValue *const_val, |
| | 7423 | AstNode *source_node) |
| | 7424 | { |
| 7414 | Error err; | 7425 | Error err; |
| 7415 | ConstExprValue *val = const_ptr_pointee_unchecked(ira->codegen, const_val); | 7426 | ConstExprValue *val = const_ptr_pointee_unchecked(codegen, const_val); |
| 7416 | assert(val != nullptr); | 7427 | assert(val != nullptr); |
| 7417 | assert(const_val->type->id == ZigTypeIdPointer); | 7428 | assert(const_val->type->id == ZigTypeIdPointer); |
| 7418 | ZigType *expected_type = const_val->type->data.pointer.child_type; | 7429 | ZigType *expected_type = const_val->type->data.pointer.child_type; |
| 7419 | if (!types_have_same_zig_comptime_repr(val->type, expected_type)) { | 7430 | if (!types_have_same_zig_comptime_repr(val->type, expected_type)) { |
| 7420 | if ((err = eval_comptime_ptr_reinterpret(ira, source_node, const_val))) | 7431 | if ((err = eval_comptime_ptr_reinterpret(ira, codegen, source_node, const_val))) |
| 7421 | return nullptr; | 7432 | return nullptr; |
| 7422 | return const_ptr_pointee_unchecked(ira->codegen, const_val); | 7433 | return const_ptr_pointee_unchecked(codegen, const_val); |
| 7423 | } | 7434 | } |
| 7424 | return val; | 7435 | return val; |
| 7425 | } | 7436 | } |
| ... | @@ -9461,7 +9472,7 @@ static IrInstruction *ir_resolve_ptr_of_array_to_unknown_len_ptr(IrAnalyze *ira, | ... | @@ -9461,7 +9472,7 @@ static IrInstruction *ir_resolve_ptr_of_array_to_unknown_len_ptr(IrAnalyze *ira, |
| 9461 | wanted_type = adjust_ptr_align(ira->codegen, wanted_type, get_ptr_align(ira->codegen, value->value.type)); | 9472 | wanted_type = adjust_ptr_align(ira->codegen, wanted_type, get_ptr_align(ira->codegen, value->value.type)); |
| 9462 | | 9473 | |
| 9463 | if (instr_is_comptime(value)) { | 9474 | if (instr_is_comptime(value)) { |
| 9464 | ConstExprValue *pointee = ir_const_ptr_pointee(ira, &value->value, source_instr->source_node); | 9475 | ConstExprValue *pointee = const_ptr_pointee(ira, ira->codegen, &value->value, source_instr->source_node); |
| 9465 | if (pointee == nullptr) | 9476 | if (pointee == nullptr) |
| 9466 | return ira->codegen->invalid_instruction; | 9477 | return ira->codegen->invalid_instruction; |
| 9467 | if (pointee->special != ConstValSpecialRuntime) { | 9478 | if (pointee->special != ConstValSpecialRuntime) { |
| ... | @@ -9497,7 +9508,7 @@ static IrInstruction *ir_resolve_ptr_of_array_to_slice(IrAnalyze *ira, IrInstruc | ... | @@ -9497,7 +9508,7 @@ static IrInstruction *ir_resolve_ptr_of_array_to_slice(IrAnalyze *ira, IrInstruc |
| 9497 | wanted_type = adjust_slice_align(ira->codegen, wanted_type, get_ptr_align(ira->codegen, value->value.type)); | 9508 | wanted_type = adjust_slice_align(ira->codegen, wanted_type, get_ptr_align(ira->codegen, value->value.type)); |
| 9498 | | 9509 | |
| 9499 | if (instr_is_comptime(value)) { | 9510 | if (instr_is_comptime(value)) { |
| 9500 | ConstExprValue *pointee = ir_const_ptr_pointee(ira, &value->value, source_instr->source_node); | 9511 | ConstExprValue *pointee = const_ptr_pointee(ira, ira->codegen, &value->value, source_instr->source_node); |
| 9501 | if (pointee == nullptr) | 9512 | if (pointee == nullptr) |
| 9502 | return ira->codegen->invalid_instruction; | 9513 | return ira->codegen->invalid_instruction; |
| 9503 | if (pointee->special != ConstValSpecialRuntime) { | 9514 | if (pointee->special != ConstValSpecialRuntime) { |
| ... | @@ -10456,7 +10467,7 @@ static IrInstruction *ir_analyze_ptr_to_array(IrAnalyze *ira, IrInstruction *sou | ... | @@ -10456,7 +10467,7 @@ static IrInstruction *ir_analyze_ptr_to_array(IrAnalyze *ira, IrInstruction *sou |
| 10456 | return ira->codegen->invalid_instruction; | 10467 | return ira->codegen->invalid_instruction; |
| 10457 | | 10468 | |
| 10458 | assert(val->type->id == ZigTypeIdPointer); | 10469 | assert(val->type->id == ZigTypeIdPointer); |
| 10459 | ConstExprValue *pointee = ir_const_ptr_pointee(ira, val, source_instr->source_node); | 10470 | ConstExprValue *pointee = const_ptr_pointee(ira, ira->codegen, val, source_instr->source_node); |
| 10460 | if (pointee == nullptr) | 10471 | if (pointee == nullptr) |
| 10461 | return ira->codegen->invalid_instruction; | 10472 | return ira->codegen->invalid_instruction; |
| 10462 | if (pointee->special != ConstValSpecialRuntime) { | 10473 | if (pointee->special != ConstValSpecialRuntime) { |
| ... | @@ -11025,7 +11036,7 @@ static IrInstruction *ir_get_deref(IrAnalyze *ira, IrInstruction *source_instruc | ... | @@ -11025,7 +11036,7 @@ static IrInstruction *ir_get_deref(IrAnalyze *ira, IrInstruction *source_instruc |
| 11025 | IrInstruction *result = ir_create_const(&ira->new_irb, source_instruction->scope, | 11036 | IrInstruction *result = ir_create_const(&ira->new_irb, source_instruction->scope, |
| 11026 | source_instruction->source_node, child_type); | 11037 | source_instruction->source_node, child_type); |
| 11027 | | 11038 | |
| 11028 | if ((err = ir_read_const_ptr(ira, source_instruction->source_node, &result->value, | 11039 | if ((err = ir_read_const_ptr(ira, ira->codegen, source_instruction->source_node, &result->value, |
| 11029 | &ptr->value))) | 11040 | &ptr->value))) |
| 11030 | { | 11041 | { |
| 11031 | return ira->codegen->invalid_instruction; | 11042 | return ira->codegen->invalid_instruction; |
| ... | @@ -13730,21 +13741,21 @@ static IrInstruction *ir_analyze_instruction_call(IrAnalyze *ira, IrInstructionC | ... | @@ -13730,21 +13741,21 @@ static IrInstruction *ir_analyze_instruction_call(IrAnalyze *ira, IrInstructionC |
| 13730 | | 13741 | |
| 13731 | // out_val->type must be the type to read the pointer as | 13742 | // out_val->type must be the type to read the pointer as |
| 13732 | // if the type is different than the actual type then it does a comptime byte reinterpretation | 13743 | // if the type is different than the actual type then it does a comptime byte reinterpretation |
| 13733 | static Error ir_read_const_ptr(IrAnalyze *ira, AstNode *source_node, | 13744 | static Error ir_read_const_ptr(IrAnalyze *ira, CodeGen *codegen, AstNode *source_node, |
| 13734 | ConstExprValue *out_val, ConstExprValue *ptr_val) | 13745 | ConstExprValue *out_val, ConstExprValue *ptr_val) |
| 13735 | { | 13746 | { |
| 13736 | Error err; | 13747 | Error err; |
| 13737 | assert(out_val->type != nullptr); | 13748 | assert(out_val->type != nullptr); |
| 13738 | | 13749 | |
| 13739 | ConstExprValue *pointee = const_ptr_pointee_unchecked(ira->codegen, ptr_val); | 13750 | ConstExprValue *pointee = const_ptr_pointee_unchecked(codegen, ptr_val); |
| 13740 | | 13751 | |
| 13741 | if ((err = type_resolve(ira->codegen, pointee->type, ResolveStatusSizeKnown))) | 13752 | if ((err = type_resolve(codegen, pointee->type, ResolveStatusSizeKnown))) |
| 13742 | return ErrorSemanticAnalyzeFail; | 13753 | return ErrorSemanticAnalyzeFail; |
| 13743 | if ((err = type_resolve(ira->codegen, out_val->type, ResolveStatusSizeKnown))) | 13754 | if ((err = type_resolve(codegen, out_val->type, ResolveStatusSizeKnown))) |
| 13744 | return ErrorSemanticAnalyzeFail; | 13755 | return ErrorSemanticAnalyzeFail; |
| 13745 | | 13756 | |
| 13746 | size_t src_size = type_size(ira->codegen, pointee->type); | 13757 | size_t src_size = type_size(codegen, pointee->type); |
| 13747 | size_t dst_size = type_size(ira->codegen, out_val->type); | 13758 | size_t dst_size = type_size(codegen, out_val->type); |
| 13748 | | 13759 | |
| 13749 | if (src_size == dst_size && types_have_same_zig_comptime_repr(pointee->type, out_val->type)) { | 13760 | if (src_size == dst_size && types_have_same_zig_comptime_repr(pointee->type, out_val->type)) { |
| 13750 | copy_const_val(out_val, pointee, ptr_val->data.x_ptr.mut == ConstPtrMutComptimeConst); | 13761 | copy_const_val(out_val, pointee, ptr_val->data.x_ptr.mut == ConstPtrMutComptimeConst); |
| ... | @@ -13754,8 +13765,8 @@ static Error ir_read_const_ptr(IrAnalyze *ira, AstNode *source_node, | ... | @@ -13754,8 +13765,8 @@ static Error ir_read_const_ptr(IrAnalyze *ira, AstNode *source_node, |
| 13754 | if (dst_size <= src_size) { | 13765 | if (dst_size <= src_size) { |
| 13755 | Buf buf = BUF_INIT; | 13766 | Buf buf = BUF_INIT; |
| 13756 | buf_resize(&buf, src_size); | 13767 | buf_resize(&buf, src_size); |
| 13757 | buf_write_value_bytes(ira->codegen, (uint8_t*)buf_ptr(&buf), pointee); | 13768 | buf_write_value_bytes(codegen, (uint8_t*)buf_ptr(&buf), pointee); |
| 13758 | if ((err = buf_read_value_bytes(ira, source_node, (uint8_t*)buf_ptr(&buf), out_val))) | 13769 | if ((err = buf_read_value_bytes(ira, codegen, source_node, (uint8_t*)buf_ptr(&buf), out_val))) |
| 13759 | return err; | 13770 | return err; |
| 13760 | return ErrorNone; | 13771 | return ErrorNone; |
| 13761 | } | 13772 | } |
| ... | @@ -13764,7 +13775,7 @@ static Error ir_read_const_ptr(IrAnalyze *ira, AstNode *source_node, | ... | @@ -13764,7 +13775,7 @@ static Error ir_read_const_ptr(IrAnalyze *ira, AstNode *source_node, |
| 13764 | case ConstPtrSpecialInvalid: | 13775 | case ConstPtrSpecialInvalid: |
| 13765 | zig_unreachable(); | 13776 | zig_unreachable(); |
| 13766 | case ConstPtrSpecialRef: { | 13777 | case ConstPtrSpecialRef: { |
| 13767 | ir_add_error_node(ira, source_node, | 13778 | opt_ir_add_error_node(ira, codegen, source_node, |
| 13768 | buf_sprintf("attempt to read %zu bytes from pointer to %s which is %zu bytes", | 13779 | buf_sprintf("attempt to read %zu bytes from pointer to %s which is %zu bytes", |
| 13769 | dst_size, buf_ptr(&pointee->type->name), src_size)); | 13780 | dst_size, buf_ptr(&pointee->type->name), src_size)); |
| 13770 | return ErrorSemanticAnalyzeFail; | 13781 | return ErrorSemanticAnalyzeFail; |
| ... | @@ -13778,7 +13789,7 @@ static Error ir_read_const_ptr(IrAnalyze *ira, AstNode *source_node, | ... | @@ -13778,7 +13789,7 @@ static Error ir_read_const_ptr(IrAnalyze *ira, AstNode *source_node, |
| 13778 | size_t elem_index = ptr_val->data.x_ptr.data.base_array.elem_index; | 13789 | size_t elem_index = ptr_val->data.x_ptr.data.base_array.elem_index; |
| 13779 | src_size = elem_size * (array_val->type->data.array.len - elem_index); | 13790 | src_size = elem_size * (array_val->type->data.array.len - elem_index); |
| 13780 | if (dst_size > src_size) { | 13791 | if (dst_size > src_size) { |
| 13781 | ir_add_error_node(ira, source_node, | 13792 | opt_ir_add_error_node(ira, codegen, source_node, |
| 13782 | buf_sprintf("attempt to read %zu bytes from %s at index %" ZIG_PRI_usize " which is %zu bytes", | 13793 | buf_sprintf("attempt to read %zu bytes from %s at index %" ZIG_PRI_usize " which is %zu bytes", |
| 13783 | dst_size, buf_ptr(&array_val->type->name), elem_index, src_size)); | 13794 | dst_size, buf_ptr(&array_val->type->name), elem_index, src_size)); |
| 13784 | return ErrorSemanticAnalyzeFail; | 13795 | return ErrorSemanticAnalyzeFail; |
| ... | @@ -13788,9 +13799,9 @@ static Error ir_read_const_ptr(IrAnalyze *ira, AstNode *source_node, | ... | @@ -13788,9 +13799,9 @@ static Error ir_read_const_ptr(IrAnalyze *ira, AstNode *source_node, |
| 13788 | buf_resize(&buf, elem_count * elem_size); | 13799 | buf_resize(&buf, elem_count * elem_size); |
| 13789 | for (size_t i = 0; i < elem_count; i += 1) { | 13800 | for (size_t i = 0; i < elem_count; i += 1) { |
| 13790 | ConstExprValue *elem_val = &array_val->data.x_array.data.s_none.elements[elem_index + i]; | 13801 | ConstExprValue *elem_val = &array_val->data.x_array.data.s_none.elements[elem_index + i]; |
| 13791 | buf_write_value_bytes(ira->codegen, (uint8_t*)buf_ptr(&buf) + (i * elem_size), elem_val); | 13802 | buf_write_value_bytes(codegen, (uint8_t*)buf_ptr(&buf) + (i * elem_size), elem_val); |
| 13792 | } | 13803 | } |
| 13793 | if ((err = buf_read_value_bytes(ira, source_node, (uint8_t*)buf_ptr(&buf), out_val))) | 13804 | if ((err = buf_read_value_bytes(ira, codegen, source_node, (uint8_t*)buf_ptr(&buf), out_val))) |
| 13794 | return err; | 13805 | return err; |
| 13795 | return ErrorNone; | 13806 | return ErrorNone; |
| 13796 | } | 13807 | } |
| ... | @@ -14227,7 +14238,7 @@ static IrInstruction *ir_analyze_instruction_elem_ptr(IrAnalyze *ira, IrInstruct | ... | @@ -14227,7 +14238,7 @@ static IrInstruction *ir_analyze_instruction_elem_ptr(IrAnalyze *ira, IrInstruct |
| 14227 | array_type = array_type->data.pointer.child_type; | 14238 | array_type = array_type->data.pointer.child_type; |
| 14228 | ptr_type = ptr_type->data.pointer.child_type; | 14239 | ptr_type = ptr_type->data.pointer.child_type; |
| 14229 | if (orig_array_ptr_val->special != ConstValSpecialRuntime) { | 14240 | if (orig_array_ptr_val->special != ConstValSpecialRuntime) { |
| 14230 | orig_array_ptr_val = ir_const_ptr_pointee(ira, orig_array_ptr_val, | 14241 | orig_array_ptr_val = const_ptr_pointee(ira, ira->codegen, orig_array_ptr_val, |
| 14231 | elem_ptr_instruction->base.source_node); | 14242 | elem_ptr_instruction->base.source_node); |
| 14232 | if (orig_array_ptr_val == nullptr) | 14243 | if (orig_array_ptr_val == nullptr) |
| 14233 | return ira->codegen->invalid_instruction; | 14244 | return ira->codegen->invalid_instruction; |
| ... | @@ -14271,7 +14282,7 @@ static IrInstruction *ir_analyze_instruction_elem_ptr(IrAnalyze *ira, IrInstruct | ... | @@ -14271,7 +14282,7 @@ static IrInstruction *ir_analyze_instruction_elem_ptr(IrAnalyze *ira, IrInstruct |
| 14271 | ConstExprValue *ptr_val = ir_resolve_const(ira, array_ptr, UndefBad); | 14282 | ConstExprValue *ptr_val = ir_resolve_const(ira, array_ptr, UndefBad); |
| 14272 | if (!ptr_val) | 14283 | if (!ptr_val) |
| 14273 | return ira->codegen->invalid_instruction; | 14284 | return ira->codegen->invalid_instruction; |
| 14274 | ConstExprValue *args_val = ir_const_ptr_pointee(ira, ptr_val, elem_ptr_instruction->base.source_node); | 14285 | ConstExprValue *args_val = const_ptr_pointee(ira, ira->codegen, ptr_val, elem_ptr_instruction->base.source_node); |
| 14275 | if (args_val == nullptr) | 14286 | if (args_val == nullptr) |
| 14276 | return ira->codegen->invalid_instruction; | 14287 | return ira->codegen->invalid_instruction; |
| 14277 | size_t start = args_val->data.x_arg_tuple.start_index; | 14288 | size_t start = args_val->data.x_arg_tuple.start_index; |
| ... | @@ -14353,7 +14364,7 @@ static IrInstruction *ir_analyze_instruction_elem_ptr(IrAnalyze *ira, IrInstruct | ... | @@ -14353,7 +14364,7 @@ static IrInstruction *ir_analyze_instruction_elem_ptr(IrAnalyze *ira, IrInstruct |
| 14353 | (orig_array_ptr_val->data.x_ptr.mut != ConstPtrMutRuntimeVar || | 14364 | (orig_array_ptr_val->data.x_ptr.mut != ConstPtrMutRuntimeVar || |
| 14354 | array_type->id == ZigTypeIdArray)) | 14365 | array_type->id == ZigTypeIdArray)) |
| 14355 | { | 14366 | { |
| 14356 | ConstExprValue *array_ptr_val = ir_const_ptr_pointee(ira, orig_array_ptr_val, | 14367 | ConstExprValue *array_ptr_val = const_ptr_pointee(ira, ira->codegen, orig_array_ptr_val, |
| 14357 | elem_ptr_instruction->base.source_node); | 14368 | elem_ptr_instruction->base.source_node); |
| 14358 | if (array_ptr_val == nullptr) | 14369 | if (array_ptr_val == nullptr) |
| 14359 | return ira->codegen->invalid_instruction; | 14370 | return ira->codegen->invalid_instruction; |
| ... | @@ -14572,7 +14583,7 @@ static IrInstruction *ir_analyze_container_field_ptr(IrAnalyze *ira, Buf *field_ | ... | @@ -14572,7 +14583,7 @@ static IrInstruction *ir_analyze_container_field_ptr(IrAnalyze *ira, Buf *field_ |
| 14572 | return ira->codegen->invalid_instruction; | 14583 | return ira->codegen->invalid_instruction; |
| 14573 | | 14584 | |
| 14574 | if (ptr_val->data.x_ptr.special != ConstPtrSpecialHardCodedAddr) { | 14585 | if (ptr_val->data.x_ptr.special != ConstPtrSpecialHardCodedAddr) { |
| 14575 | ConstExprValue *struct_val = ir_const_ptr_pointee(ira, ptr_val, source_instr->source_node); | 14586 | ConstExprValue *struct_val = const_ptr_pointee(ira, ira->codegen, ptr_val, source_instr->source_node); |
| 14576 | if (struct_val == nullptr) | 14587 | if (struct_val == nullptr) |
| 14577 | return ira->codegen->invalid_instruction; | 14588 | return ira->codegen->invalid_instruction; |
| 14578 | if (type_is_invalid(struct_val->type)) | 14589 | if (type_is_invalid(struct_val->type)) |
| ... | @@ -14614,7 +14625,7 @@ static IrInstruction *ir_analyze_container_field_ptr(IrAnalyze *ira, Buf *field_ | ... | @@ -14614,7 +14625,7 @@ static IrInstruction *ir_analyze_container_field_ptr(IrAnalyze *ira, Buf *field_ |
| 14614 | return ira->codegen->invalid_instruction; | 14625 | return ira->codegen->invalid_instruction; |
| 14615 | | 14626 | |
| 14616 | if (ptr_val->data.x_ptr.special != ConstPtrSpecialHardCodedAddr) { | 14627 | if (ptr_val->data.x_ptr.special != ConstPtrSpecialHardCodedAddr) { |
| 14617 | ConstExprValue *union_val = ir_const_ptr_pointee(ira, ptr_val, source_instr->source_node); | 14628 | ConstExprValue *union_val = const_ptr_pointee(ira, ira->codegen, ptr_val, source_instr->source_node); |
| 14618 | if (union_val == nullptr) | 14629 | if (union_val == nullptr) |
| 14619 | return ira->codegen->invalid_instruction; | 14630 | return ira->codegen->invalid_instruction; |
| 14620 | if (type_is_invalid(union_val->type)) | 14631 | if (type_is_invalid(union_val->type)) |
| ... | @@ -14811,7 +14822,7 @@ static IrInstruction *ir_analyze_instruction_field_ptr(IrAnalyze *ira, IrInstruc | ... | @@ -14811,7 +14822,7 @@ static IrInstruction *ir_analyze_instruction_field_ptr(IrAnalyze *ira, IrInstruc |
| 14811 | return ira->codegen->invalid_instruction; | 14822 | return ira->codegen->invalid_instruction; |
| 14812 | | 14823 | |
| 14813 | assert(container_ptr->value.type->id == ZigTypeIdPointer); | 14824 | assert(container_ptr->value.type->id == ZigTypeIdPointer); |
| 14814 | ConstExprValue *child_val = ir_const_ptr_pointee(ira, container_ptr_val, source_node); | 14825 | ConstExprValue *child_val = const_ptr_pointee(ira, ira->codegen, container_ptr_val, source_node); |
| 14815 | if (child_val == nullptr) | 14826 | if (child_val == nullptr) |
| 14816 | return ira->codegen->invalid_instruction; | 14827 | return ira->codegen->invalid_instruction; |
| 14817 | | 14828 | |
| ... | @@ -14837,7 +14848,7 @@ static IrInstruction *ir_analyze_instruction_field_ptr(IrAnalyze *ira, IrInstruc | ... | @@ -14837,7 +14848,7 @@ static IrInstruction *ir_analyze_instruction_field_ptr(IrAnalyze *ira, IrInstruc |
| 14837 | return ira->codegen->invalid_instruction; | 14848 | return ira->codegen->invalid_instruction; |
| 14838 | | 14849 | |
| 14839 | assert(container_ptr->value.type->id == ZigTypeIdPointer); | 14850 | assert(container_ptr->value.type->id == ZigTypeIdPointer); |
| 14840 | ConstExprValue *child_val = ir_const_ptr_pointee(ira, container_ptr_val, source_node); | 14851 | ConstExprValue *child_val = const_ptr_pointee(ira, ira->codegen, container_ptr_val, source_node); |
| 14841 | if (child_val == nullptr) | 14852 | if (child_val == nullptr) |
| 14842 | return ira->codegen->invalid_instruction; | 14853 | return ira->codegen->invalid_instruction; |
| 14843 | ZigType *child_type = child_val->data.x_type; | 14854 | ZigType *child_type = child_val->data.x_type; |
| ... | @@ -15112,7 +15123,7 @@ static IrInstruction *ir_analyze_instruction_field_ptr(IrAnalyze *ira, IrInstruc | ... | @@ -15112,7 +15123,7 @@ static IrInstruction *ir_analyze_instruction_field_ptr(IrAnalyze *ira, IrInstruc |
| 15112 | if (!container_ptr_val) | 15123 | if (!container_ptr_val) |
| 15113 | return ira->codegen->invalid_instruction; | 15124 | return ira->codegen->invalid_instruction; |
| 15114 | | 15125 | |
| 15115 | ConstExprValue *namespace_val = ir_const_ptr_pointee(ira, container_ptr_val, | 15126 | ConstExprValue *namespace_val = const_ptr_pointee(ira, ira->codegen, container_ptr_val, |
| 15116 | field_ptr_instruction->base.source_node); | 15127 | field_ptr_instruction->base.source_node); |
| 15117 | if (namespace_val == nullptr) | 15128 | if (namespace_val == nullptr) |
| 15118 | return ira->codegen->invalid_instruction; | 15129 | return ira->codegen->invalid_instruction; |
| ... | @@ -15187,7 +15198,7 @@ static IrInstruction *ir_analyze_instruction_store_ptr(IrAnalyze *ira, IrInstruc | ... | @@ -15187,7 +15198,7 @@ static IrInstruction *ir_analyze_instruction_store_ptr(IrAnalyze *ira, IrInstruc |
| 15187 | } | 15198 | } |
| 15188 | if (ptr->value.data.x_ptr.mut == ConstPtrMutComptimeVar) { | 15199 | if (ptr->value.data.x_ptr.mut == ConstPtrMutComptimeVar) { |
| 15189 | if (instr_is_comptime(casted_value)) { | 15200 | if (instr_is_comptime(casted_value)) { |
| 15190 | ConstExprValue *dest_val = ir_const_ptr_pointee(ira, &ptr->value, store_ptr_instruction->base.source_node); | 15201 | ConstExprValue *dest_val = const_ptr_pointee(ira, ira->codegen, &ptr->value, store_ptr_instruction->base.source_node); |
| 15191 | if (dest_val == nullptr) | 15202 | if (dest_val == nullptr) |
| 15192 | return ira->codegen->invalid_instruction; | 15203 | return ira->codegen->invalid_instruction; |
| 15193 | if (dest_val->special != ConstValSpecialRuntime) { | 15204 | if (dest_val->special != ConstValSpecialRuntime) { |
| ... | @@ -15735,7 +15746,7 @@ static IrInstruction *ir_analyze_instruction_unwrap_maybe(IrAnalyze *ira, | ... | @@ -15735,7 +15746,7 @@ static IrInstruction *ir_analyze_instruction_unwrap_maybe(IrAnalyze *ira, |
| 15735 | ConstExprValue *val = ir_resolve_const(ira, value, UndefBad); | 15746 | ConstExprValue *val = ir_resolve_const(ira, value, UndefBad); |
| 15736 | if (!val) | 15747 | if (!val) |
| 15737 | return ira->codegen->invalid_instruction; | 15748 | return ira->codegen->invalid_instruction; |
| 15738 | ConstExprValue *maybe_val = ir_const_ptr_pointee(ira, val, unwrap_maybe_instruction->base.source_node); | 15749 | ConstExprValue *maybe_val = const_ptr_pointee(ira, ira->codegen, val, unwrap_maybe_instruction->base.source_node); |
| 15739 | if (maybe_val == nullptr) | 15750 | if (maybe_val == nullptr) |
| 15740 | return ira->codegen->invalid_instruction; | 15751 | return ira->codegen->invalid_instruction; |
| 15741 | | 15752 | |
| ... | @@ -16032,7 +16043,7 @@ static IrInstruction *ir_analyze_instruction_switch_target(IrAnalyze *ira, | ... | @@ -16032,7 +16043,7 @@ static IrInstruction *ir_analyze_instruction_switch_target(IrAnalyze *ira, |
| 16032 | ZigType *target_type = target_value_ptr->value.type->data.pointer.child_type; | 16043 | ZigType *target_type = target_value_ptr->value.type->data.pointer.child_type; |
| 16033 | ConstExprValue *pointee_val = nullptr; | 16044 | ConstExprValue *pointee_val = nullptr; |
| 16034 | if (instr_is_comptime(target_value_ptr)) { | 16045 | if (instr_is_comptime(target_value_ptr)) { |
| 16035 | pointee_val = ir_const_ptr_pointee(ira, &target_value_ptr->value, target_value_ptr->source_node); | 16046 | pointee_val = const_ptr_pointee(ira, ira->codegen, &target_value_ptr->value, target_value_ptr->source_node); |
| 16036 | if (pointee_val == nullptr) | 16047 | if (pointee_val == nullptr) |
| 16037 | return ira->codegen->invalid_instruction; | 16048 | return ira->codegen->invalid_instruction; |
| 16038 | | 16049 | |
| ... | @@ -16167,7 +16178,7 @@ static IrInstruction *ir_analyze_instruction_switch_var(IrAnalyze *ira, IrInstru | ... | @@ -16167,7 +16178,7 @@ static IrInstruction *ir_analyze_instruction_switch_var(IrAnalyze *ira, IrInstru |
| 16167 | if (!target_value_ptr) | 16178 | if (!target_value_ptr) |
| 16168 | return ira->codegen->invalid_instruction; | 16179 | return ira->codegen->invalid_instruction; |
| 16169 | | 16180 | |
| 16170 | ConstExprValue *pointee_val = ir_const_ptr_pointee(ira, target_val_ptr, instruction->base.source_node); | 16181 | ConstExprValue *pointee_val = const_ptr_pointee(ira, ira->codegen, target_val_ptr, instruction->base.source_node); |
| 16171 | if (pointee_val == nullptr) | 16182 | if (pointee_val == nullptr) |
| 16172 | return ira->codegen->invalid_instruction; | 16183 | return ira->codegen->invalid_instruction; |
| 16173 | | 16184 | |
| ... | @@ -18882,18 +18893,18 @@ static IrInstruction *ir_analyze_instruction_slice(IrAnalyze *ira, IrInstruction | ... | @@ -18882,18 +18893,18 @@ static IrInstruction *ir_analyze_instruction_slice(IrAnalyze *ira, IrInstruction |
| 18882 | if (array_type->id == ZigTypeIdPointer) { | 18893 | if (array_type->id == ZigTypeIdPointer) { |
| 18883 | ZigType *child_array_type = array_type->data.pointer.child_type; | 18894 | ZigType *child_array_type = array_type->data.pointer.child_type; |
| 18884 | assert(child_array_type->id == ZigTypeIdArray); | 18895 | assert(child_array_type->id == ZigTypeIdArray); |
| 18885 | parent_ptr = ir_const_ptr_pointee(ira, &ptr_ptr->value, instruction->base.source_node); | 18896 | parent_ptr = const_ptr_pointee(ira, ira->codegen, &ptr_ptr->value, instruction->base.source_node); |
| 18886 | if (parent_ptr == nullptr) | 18897 | if (parent_ptr == nullptr) |
| 18887 | return ira->codegen->invalid_instruction; | 18898 | return ira->codegen->invalid_instruction; |
| 18888 | | 18899 | |
| 18889 | array_val = ir_const_ptr_pointee(ira, parent_ptr, instruction->base.source_node); | 18900 | array_val = const_ptr_pointee(ira, ira->codegen, parent_ptr, instruction->base.source_node); |
| 18890 | if (array_val == nullptr) | 18901 | if (array_val == nullptr) |
| 18891 | return ira->codegen->invalid_instruction; | 18902 | return ira->codegen->invalid_instruction; |
| 18892 | | 18903 | |
| 18893 | rel_end = child_array_type->data.array.len; | 18904 | rel_end = child_array_type->data.array.len; |
| 18894 | abs_offset = 0; | 18905 | abs_offset = 0; |
| 18895 | } else { | 18906 | } else { |
| 18896 | array_val = ir_const_ptr_pointee(ira, &ptr_ptr->value, instruction->base.source_node); | 18907 | array_val = const_ptr_pointee(ira, ira->codegen, &ptr_ptr->value, instruction->base.source_node); |
| 18897 | if (array_val == nullptr) | 18908 | if (array_val == nullptr) |
| 18898 | return ira->codegen->invalid_instruction; | 18909 | return ira->codegen->invalid_instruction; |
| 18899 | rel_end = array_type->data.array.len; | 18910 | rel_end = array_type->data.array.len; |
| ... | @@ -18902,7 +18913,7 @@ static IrInstruction *ir_analyze_instruction_slice(IrAnalyze *ira, IrInstruction | ... | @@ -18902,7 +18913,7 @@ static IrInstruction *ir_analyze_instruction_slice(IrAnalyze *ira, IrInstruction |
| 18902 | } | 18913 | } |
| 18903 | } else if (array_type->id == ZigTypeIdPointer) { | 18914 | } else if (array_type->id == ZigTypeIdPointer) { |
| 18904 | assert(array_type->data.pointer.ptr_len == PtrLenUnknown); | 18915 | assert(array_type->data.pointer.ptr_len == PtrLenUnknown); |
| 18905 | parent_ptr = ir_const_ptr_pointee(ira, &ptr_ptr->value, instruction->base.source_node); | 18916 | parent_ptr = const_ptr_pointee(ira, ira->codegen, &ptr_ptr->value, instruction->base.source_node); |
| 18906 | if (parent_ptr == nullptr) | 18917 | if (parent_ptr == nullptr) |
| 18907 | return ira->codegen->invalid_instruction; | 18918 | return ira->codegen->invalid_instruction; |
| 18908 | | 18919 | |
| ... | @@ -18942,7 +18953,7 @@ static IrInstruction *ir_analyze_instruction_slice(IrAnalyze *ira, IrInstruction | ... | @@ -18942,7 +18953,7 @@ static IrInstruction *ir_analyze_instruction_slice(IrAnalyze *ira, IrInstruction |
| 18942 | zig_panic("TODO slice of ptr cast from function"); | 18953 | zig_panic("TODO slice of ptr cast from function"); |
| 18943 | } | 18954 | } |
| 18944 | } else if (is_slice(array_type)) { | 18955 | } else if (is_slice(array_type)) { |
| 18945 | ConstExprValue *slice_ptr = ir_const_ptr_pointee(ira, &ptr_ptr->value, instruction->base.source_node); | 18956 | ConstExprValue *slice_ptr = const_ptr_pointee(ira, ira->codegen, &ptr_ptr->value, instruction->base.source_node); |
| 18946 | if (slice_ptr == nullptr) | 18957 | if (slice_ptr == nullptr) |
| 18947 | return ira->codegen->invalid_instruction; | 18958 | return ira->codegen->invalid_instruction; |
| 18948 | | 18959 | |
| ... | @@ -19351,7 +19362,7 @@ static IrInstruction *ir_analyze_instruction_overflow_op(IrAnalyze *ira, IrInstr | ... | @@ -19351,7 +19362,7 @@ static IrInstruction *ir_analyze_instruction_overflow_op(IrAnalyze *ira, IrInstr |
| 19351 | { | 19362 | { |
| 19352 | BigInt *op1_bigint = &casted_op1->value.data.x_bigint; | 19363 | BigInt *op1_bigint = &casted_op1->value.data.x_bigint; |
| 19353 | BigInt *op2_bigint = &casted_op2->value.data.x_bigint; | 19364 | BigInt *op2_bigint = &casted_op2->value.data.x_bigint; |
| 19354 | ConstExprValue *pointee_val = ir_const_ptr_pointee(ira, &casted_result_ptr->value, casted_result_ptr->source_node); | 19365 | ConstExprValue *pointee_val = const_ptr_pointee(ira, ira->codegen, &casted_result_ptr->value, casted_result_ptr->source_node); |
| 19355 | if (pointee_val == nullptr) | 19366 | if (pointee_val == nullptr) |
| 19356 | return ira->codegen->invalid_instruction; | 19367 | return ira->codegen->invalid_instruction; |
| 19357 | BigInt *dest_bigint = &pointee_val->data.x_bigint; | 19368 | BigInt *dest_bigint = &pointee_val->data.x_bigint; |
| ... | @@ -19450,7 +19461,7 @@ static IrInstruction *ir_analyze_instruction_unwrap_err_code(IrAnalyze *ira, | ... | @@ -19450,7 +19461,7 @@ static IrInstruction *ir_analyze_instruction_unwrap_err_code(IrAnalyze *ira, |
| 19450 | ConstExprValue *ptr_val = ir_resolve_const(ira, value, UndefBad); | 19461 | ConstExprValue *ptr_val = ir_resolve_const(ira, value, UndefBad); |
| 19451 | if (!ptr_val) | 19462 | if (!ptr_val) |
| 19452 | return ira->codegen->invalid_instruction; | 19463 | return ira->codegen->invalid_instruction; |
| 19453 | ConstExprValue *err_union_val = ir_const_ptr_pointee(ira, ptr_val, instruction->base.source_node); | 19464 | ConstExprValue *err_union_val = const_ptr_pointee(ira, ira->codegen, ptr_val, instruction->base.source_node); |
| 19454 | if (err_union_val == nullptr) | 19465 | if (err_union_val == nullptr) |
| 19455 | return ira->codegen->invalid_instruction; | 19466 | return ira->codegen->invalid_instruction; |
| 19456 | if (err_union_val->special != ConstValSpecialRuntime) { | 19467 | if (err_union_val->special != ConstValSpecialRuntime) { |
| ... | @@ -19502,7 +19513,7 @@ static IrInstruction *ir_analyze_instruction_unwrap_err_payload(IrAnalyze *ira, | ... | @@ -19502,7 +19513,7 @@ static IrInstruction *ir_analyze_instruction_unwrap_err_payload(IrAnalyze *ira, |
| 19502 | ConstExprValue *ptr_val = ir_resolve_const(ira, value, UndefBad); | 19513 | ConstExprValue *ptr_val = ir_resolve_const(ira, value, UndefBad); |
| 19503 | if (!ptr_val) | 19514 | if (!ptr_val) |
| 19504 | return ira->codegen->invalid_instruction; | 19515 | return ira->codegen->invalid_instruction; |
| 19505 | ConstExprValue *err_union_val = ir_const_ptr_pointee(ira, ptr_val, instruction->base.source_node); | 19516 | ConstExprValue *err_union_val = const_ptr_pointee(ira, ira->codegen, ptr_val, instruction->base.source_node); |
| 19506 | if (err_union_val == nullptr) | 19517 | if (err_union_val == nullptr) |
| 19507 | return ira->codegen->invalid_instruction; | 19518 | return ira->codegen->invalid_instruction; |
| 19508 | if (err_union_val->special != ConstValSpecialRuntime) { | 19519 | if (err_union_val->special != ConstValSpecialRuntime) { |
| ... | @@ -20132,7 +20143,7 @@ static void buf_write_value_bytes(CodeGen *codegen, uint8_t *buf, ConstExprValue | ... | @@ -20132,7 +20143,7 @@ static void buf_write_value_bytes(CodeGen *codegen, uint8_t *buf, ConstExprValue |
| 20132 | zig_unreachable(); | 20143 | zig_unreachable(); |
| 20133 | } | 20144 | } |
| 20134 | | 20145 | |
| 20135 | static Error buf_read_value_bytes(IrAnalyze *ira, AstNode *source_node, uint8_t *buf, ConstExprValue *val) { | 20146 | static Error buf_read_value_bytes(IrAnalyze *ira, CodeGen *codegen, AstNode *source_node, uint8_t *buf, ConstExprValue *val) { |
| 20136 | Error err; | 20147 | Error err; |
| 20137 | assert(val->special == ConstValSpecialStatic); | 20148 | assert(val->special == ConstValSpecialStatic); |
| 20138 | switch (val->type->id) { | 20149 | switch (val->type->id) { |
| ... | @@ -20156,22 +20167,22 @@ static Error buf_read_value_bytes(IrAnalyze *ira, AstNode *source_node, uint8_t | ... | @@ -20156,22 +20167,22 @@ static Error buf_read_value_bytes(IrAnalyze *ira, AstNode *source_node, uint8_t |
| 20156 | return ErrorNone; | 20167 | return ErrorNone; |
| 20157 | case ZigTypeIdInt: | 20168 | case ZigTypeIdInt: |
| 20158 | bigint_read_twos_complement(&val->data.x_bigint, buf, val->type->data.integral.bit_count, | 20169 | bigint_read_twos_complement(&val->data.x_bigint, buf, val->type->data.integral.bit_count, |
| 20159 | ira->codegen->is_big_endian, val->type->data.integral.is_signed); | 20170 | codegen->is_big_endian, val->type->data.integral.is_signed); |
| 20160 | return ErrorNone; | 20171 | return ErrorNone; |
| 20161 | case ZigTypeIdFloat: | 20172 | case ZigTypeIdFloat: |
| 20162 | float_read_ieee597(val, buf, ira->codegen->is_big_endian); | 20173 | float_read_ieee597(val, buf, codegen->is_big_endian); |
| 20163 | return ErrorNone; | 20174 | return ErrorNone; |
| 20164 | case ZigTypeIdPointer: | 20175 | case ZigTypeIdPointer: |
| 20165 | { | 20176 | { |
| 20166 | val->data.x_ptr.special = ConstPtrSpecialHardCodedAddr; | 20177 | val->data.x_ptr.special = ConstPtrSpecialHardCodedAddr; |
| 20167 | BigInt bn; | 20178 | BigInt bn; |
| 20168 | bigint_read_twos_complement(&bn, buf, ira->codegen->builtin_types.entry_usize->data.integral.bit_count, | 20179 | bigint_read_twos_complement(&bn, buf, codegen->builtin_types.entry_usize->data.integral.bit_count, |
| 20169 | ira->codegen->is_big_endian, false); | 20180 | codegen->is_big_endian, false); |
| 20170 | val->data.x_ptr.data.hard_coded_addr.addr = bigint_as_unsigned(&bn); | 20181 | val->data.x_ptr.data.hard_coded_addr.addr = bigint_as_unsigned(&bn); |
| 20171 | return ErrorNone; | 20182 | return ErrorNone; |
| 20172 | } | 20183 | } |
| 20173 | case ZigTypeIdArray: { | 20184 | case ZigTypeIdArray: { |
| 20174 | uint64_t elem_size = type_size(ira->codegen, val->type->data.array.child_type); | 20185 | uint64_t elem_size = type_size(codegen, val->type->data.array.child_type); |
| 20175 | size_t len = val->type->data.array.len; | 20186 | size_t len = val->type->data.array.len; |
| 20176 | | 20187 | |
| 20177 | switch (val->data.x_array.special) { | 20188 | switch (val->data.x_array.special) { |
| ... | @@ -20181,7 +20192,7 @@ static Error buf_read_value_bytes(IrAnalyze *ira, AstNode *source_node, uint8_t | ... | @@ -20181,7 +20192,7 @@ static Error buf_read_value_bytes(IrAnalyze *ira, AstNode *source_node, uint8_t |
| 20181 | ConstExprValue *elem = &val->data.x_array.data.s_none.elements[i]; | 20192 | ConstExprValue *elem = &val->data.x_array.data.s_none.elements[i]; |
| 20182 | elem->special = ConstValSpecialStatic; | 20193 | elem->special = ConstValSpecialStatic; |
| 20183 | elem->type = val->type->data.array.child_type; | 20194 | elem->type = val->type->data.array.child_type; |
| 20184 | if ((err = buf_read_value_bytes(ira, source_node, buf + (elem_size * i), elem))) | 20195 | if ((err = buf_read_value_bytes(ira, codegen, source_node, buf + (elem_size * i), elem))) |
| 20185 | return err; | 20196 | return err; |
| 20186 | } | 20197 | } |
| 20187 | break; | 20198 | break; |
| ... | @@ -20196,10 +20207,10 @@ static Error buf_read_value_bytes(IrAnalyze *ira, AstNode *source_node, uint8_t | ... | @@ -20196,10 +20207,10 @@ static Error buf_read_value_bytes(IrAnalyze *ira, AstNode *source_node, uint8_t |
| 20196 | case ZigTypeIdStruct: | 20207 | case ZigTypeIdStruct: |
| 20197 | switch (val->type->data.structure.layout) { | 20208 | switch (val->type->data.structure.layout) { |
| 20198 | case ContainerLayoutAuto: { | 20209 | case ContainerLayoutAuto: { |
| 20199 | ErrorMsg *msg = ir_add_error_node(ira, source_node, | 20210 | ErrorMsg *msg = opt_ir_add_error_node(ira, codegen, source_node, |
| 20200 | buf_sprintf("non-extern, non-packed struct '%s' cannot have its bytes reinterpreted", | 20211 | buf_sprintf("non-extern, non-packed struct '%s' cannot have its bytes reinterpreted", |
| 20201 | buf_ptr(&val->type->name))); | 20212 | buf_ptr(&val->type->name))); |
| 20202 | add_error_note(ira->codegen, msg, val->type->data.structure.decl_node, | 20213 | add_error_note(codegen, msg, val->type->data.structure.decl_node, |
| 20203 | buf_sprintf("declared here")); | 20214 | buf_sprintf("declared here")); |
| 20204 | return ErrorSemanticAnalyzeFail; | 20215 | return ErrorSemanticAnalyzeFail; |
| 20205 | } | 20216 | } |
| ... | @@ -20213,10 +20224,10 @@ static Error buf_read_value_bytes(IrAnalyze *ira, AstNode *source_node, uint8_t | ... | @@ -20213,10 +20224,10 @@ static Error buf_read_value_bytes(IrAnalyze *ira, AstNode *source_node, uint8_t |
| 20213 | field_val->type = type_field->type_entry; | 20224 | field_val->type = type_field->type_entry; |
| 20214 | if (type_field->gen_index == SIZE_MAX) | 20225 | if (type_field->gen_index == SIZE_MAX) |
| 20215 | continue; | 20226 | continue; |
| 20216 | size_t offset = LLVMOffsetOfElement(ira->codegen->target_data_ref, val->type->type_ref, | 20227 | size_t offset = LLVMOffsetOfElement(codegen->target_data_ref, val->type->type_ref, |
| 20217 | type_field->gen_index); | 20228 | type_field->gen_index); |
| 20218 | uint8_t *new_buf = buf + offset; | 20229 | uint8_t *new_buf = buf + offset; |
| 20219 | if ((err = buf_read_value_bytes(ira, source_node, new_buf, field_val))) | 20230 | if ((err = buf_read_value_bytes(ira, codegen, source_node, new_buf, field_val))) |
| 20220 | return err; | 20231 | return err; |
| 20221 | } | 20232 | } |
| 20222 | return ErrorNone; | 20233 | return ErrorNone; |
| ... | @@ -20327,7 +20338,7 @@ static IrInstruction *ir_analyze_instruction_bit_cast(IrAnalyze *ira, IrInstruct | ... | @@ -20327,7 +20338,7 @@ static IrInstruction *ir_analyze_instruction_bit_cast(IrAnalyze *ira, IrInstruct |
| 20327 | IrInstruction *result = ir_const(ira, &instruction->base, dest_type); | 20338 | IrInstruction *result = ir_const(ira, &instruction->base, dest_type); |
| 20328 | uint8_t *buf = allocate_nonzero<uint8_t>(src_size_bytes); | 20339 | uint8_t *buf = allocate_nonzero<uint8_t>(src_size_bytes); |
| 20329 | buf_write_value_bytes(ira->codegen, buf, val); | 20340 | buf_write_value_bytes(ira->codegen, buf, val); |
| 20330 | if ((err = buf_read_value_bytes(ira, instruction->base.source_node, buf, &result->value))) | 20341 | if ((err = buf_read_value_bytes(ira, ira->codegen, instruction->base.source_node, buf, &result->value))) |
| 20331 | return ira->codegen->invalid_instruction; | 20342 | return ira->codegen->invalid_instruction; |
| 20332 | return result; | 20343 | return result; |
| 20333 | } | 20344 | } |