@@ -9344,9 +9344,15 @@ static ZigType *ir_resolve_peer_types(IrAnalyze *ira, AstNode *source_node, ZigT
9344
9344
if (prev_inst->value.type->id == ZigTypeIdErrorSet) {
9345
9345
return err_set_type;
9346
9346
} else if (prev_inst->value.type->id == ZigTypeIdErrorUnion) {
9347
- return get_error_union_type(ira->codegen, err_set_type, prev_inst->value.type->data.error_union.payload_type);
9347
+ ZigType *payload_type = prev_inst->value.type->data.error_union.payload_type;
9348
+ if ((err = type_resolve(ira->codegen, payload_type, ResolveStatusSizeKnown)))
9349
+ return ira->codegen->builtin_types.entry_invalid;
9350
+ return get_error_union_type(ira->codegen, err_set_type, payload_type);
9348
9351
} else if (expected_type != nullptr && expected_type->id == ZigTypeIdErrorUnion) {
9349
- return get_error_union_type(ira->codegen, err_set_type, expected_type->data.error_union.payload_type);
9352
+ ZigType *payload_type = expected_type->data.error_union.payload_type;
9353
+ if ((err = type_resolve(ira->codegen, payload_type, ResolveStatusSizeKnown)))
9354
+ return ira->codegen->builtin_types.entry_invalid;
9355
+ return get_error_union_type(ira->codegen, err_set_type, payload_type);
9350
9356
} else {
9351
9357
if (prev_inst->value.type->id == ZigTypeIdComptimeInt ||
9352
9358
prev_inst->value.type->id == ZigTypeIdComptimeFloat)
@@ -9359,6 +9365,8 @@ static ZigType *ir_resolve_peer_types(IrAnalyze *ira, AstNode *source_node, ZigT
9359
9365
buf_sprintf("unable to make error union out of null literal"));
9360
9366
return ira->codegen->builtin_types.entry_invalid;
9361
9367
} else {
9368
+ if ((err = type_resolve(ira->codegen, prev_inst->value.type, ResolveStatusSizeKnown)))
9369
+ return ira->codegen->builtin_types.entry_invalid;
9362
9370
return get_error_union_type(ira->codegen, err_set_type, prev_inst->value.type);
9363
9371
}
9364
9372
}
@@ -13053,6 +13061,8 @@ static ZigType *ir_analyze_instruction_error_return_trace(IrAnalyze *ira,
13053
13061
static ZigType *ir_analyze_instruction_error_union(IrAnalyze *ira,
13054
13062
IrInstructionErrorUnion *instruction)
13055
13063
{
13064
+ Error err;
13065
+
13056
13066
ZigType *err_set_type = ir_resolve_type(ira, instruction->err_set->other);
13057
13067
if (type_is_invalid(err_set_type))
13058
13068
return ira->codegen->builtin_types.entry_invalid;
@@ -13068,6 +13078,8 @@ static ZigType *ir_analyze_instruction_error_union(IrAnalyze *ira,
13068
13078
return ira->codegen->builtin_types.entry_invalid;
13069
13079
}
13070
13080
13081
+ if ((err = type_resolve(ira->codegen, payload_type, ResolveStatusSizeKnown)))
13082
+ return ira->codegen->builtin_types.entry_invalid;
13071
13083
ZigType *result_type = get_error_union_type(ira->codegen, err_set_type, payload_type);
13072
13084
13073
13085
ConstExprValue *out_val = ir_build_const_from(ira, &instruction->base);
@@ -13486,6 +13498,8 @@ static ZigType *ir_analyze_fn_call(IrAnalyze *ira, IrInstructionCall *call_instr
13486
13498
ZigType *inferred_err_set_type = nullptr;
13487
13499
if (fn_proto_node->data.fn_proto.auto_err_set) {
13488
13500
inferred_err_set_type = get_auto_err_set_type(ira->codegen, fn_entry);
13501
+ if ((err = type_resolve(ira->codegen, specified_return_type, ResolveStatusSizeKnown)))
13502
+ return ira->codegen->builtin_types.entry_invalid;
13489
13503
return_type = get_error_union_type(ira->codegen, inferred_err_set_type, specified_return_type);
13490
13504
} else {
13491
13505
return_type = specified_return_type;
@@ -13713,6 +13727,8 @@ static ZigType *ir_analyze_fn_call(IrAnalyze *ira, IrInstructionCall *call_instr
13713
13727
return ira->codegen->builtin_types.entry_invalid;
13714
13728
if (fn_proto_node->data.fn_proto.auto_err_set) {
13715
13729
ZigType *inferred_err_set_type = get_auto_err_set_type(ira->codegen, impl_fn);
13730
+ if ((err = type_resolve(ira->codegen, specified_return_type, ResolveStatusSizeKnown)))
13731
+ return ira->codegen->builtin_types.entry_invalid;
13716
13732
inst_fn_type_id.return_type = get_error_union_type(ira->codegen, inferred_err_set_type, specified_return_type);
13717
13733
} else {
13718
13734
inst_fn_type_id.return_type = specified_return_type;
0 commit comments