| ... | ... | @@ -9015,7 +9015,6 @@ static IrInstruction *ir_gen_node_extra(IrBuilder *irb, AstNode *node, Scope *sc |
| 9015 | 9015 | if (irb->exec->first_err_trace_msg == nullptr) { |
| 9016 | 9016 | irb->exec->first_err_trace_msg = irb->codegen->trace_err; |
| 9017 | 9017 | } |
| 9018 | | src_assert(irb->exec->first_err_trace_msg != nullptr, node); |
| 9019 | 9018 | } |
| 9020 | 9019 | return result; |
| 9021 | 9020 | } |
| ... | ... | @@ -10709,10 +10708,12 @@ static ZigType *ir_resolve_peer_types(IrAnalyze *ira, AstNode *source_node, ZigT |
| 10709 | 10708 | if (type_is_global_error_set(err_set_type)) { |
| 10710 | 10709 | continue; |
| 10711 | 10710 | } |
| 10712 | | if (!resolve_inferred_error_set(ira->codegen, cur_type, cur_inst->source_node)) { |
| 10711 | bool allow_infer = cur_type->data.error_set.infer_fn != nullptr && |
| 10712 | cur_type->data.error_set.infer_fn == ira->new_irb.exec->fn_entry; |
| 10713 | if (!allow_infer && !resolve_inferred_error_set(ira->codegen, cur_type, cur_inst->source_node)) { |
| 10713 | 10714 | return ira->codegen->builtin_types.entry_invalid; |
| 10714 | 10715 | } |
| 10715 | | if (type_is_global_error_set(cur_type)) { |
| 10716 | if (!allow_infer && type_is_global_error_set(cur_type)) { |
| 10716 | 10717 | err_set_type = ira->codegen->builtin_types.entry_global_error_set; |
| 10717 | 10718 | prev_inst = cur_inst; |
| 10718 | 10719 | continue; |
| ... | ... | @@ -10830,10 +10831,12 @@ static ZigType *ir_resolve_peer_types(IrAnalyze *ira, AstNode *source_node, ZigT |
| 10830 | 10831 | } |
| 10831 | 10832 | |
| 10832 | 10833 | if (cur_type->id == ZigTypeIdErrorSet) { |
| 10833 | | if (!resolve_inferred_error_set(ira->codegen, cur_type, cur_inst->source_node)) { |
| 10834 | bool allow_infer = cur_type->data.error_set.infer_fn != nullptr && |
| 10835 | cur_type->data.error_set.infer_fn == ira->new_irb.exec->fn_entry; |
| 10836 | if (!allow_infer && !resolve_inferred_error_set(ira->codegen, cur_type, cur_inst->source_node)) { |
| 10834 | 10837 | return ira->codegen->builtin_types.entry_invalid; |
| 10835 | 10838 | } |
| 10836 | | if (type_is_global_error_set(cur_type)) { |
| 10839 | if (!allow_infer && type_is_global_error_set(cur_type)) { |
| 10837 | 10840 | err_set_type = ira->codegen->builtin_types.entry_global_error_set; |
| 10838 | 10841 | continue; |
| 10839 | 10842 | } |
| ... | ... | @@ -10844,17 +10847,20 @@ static ZigType *ir_resolve_peer_types(IrAnalyze *ira, AstNode *source_node, ZigT |
| 10844 | 10847 | update_errors_helper(ira->codegen, &errors, &errors_count); |
| 10845 | 10848 | |
| 10846 | 10849 | if (err_set_type == nullptr) { |
| 10850 | bool allow_infer = false; |
| 10847 | 10851 | if (prev_type->id == ZigTypeIdErrorUnion) { |
| 10848 | 10852 | err_set_type = prev_type->data.error_union.err_set_type; |
| 10853 | allow_infer = err_set_type->data.error_set.infer_fn != nullptr && |
| 10854 | err_set_type->data.error_set.infer_fn == ira->new_irb.exec->fn_entry; |
| 10849 | 10855 | } else { |
| 10850 | 10856 | err_set_type = cur_type; |
| 10851 | 10857 | } |
| 10852 | 10858 | |
| 10853 | | if (!resolve_inferred_error_set(ira->codegen, err_set_type, cur_inst->source_node)) { |
| 10859 | if (!allow_infer && !resolve_inferred_error_set(ira->codegen, err_set_type, cur_inst->source_node)) { |
| 10854 | 10860 | return ira->codegen->builtin_types.entry_invalid; |
| 10855 | 10861 | } |
| 10856 | 10862 | |
| 10857 | | if (type_is_global_error_set(err_set_type)) { |
| 10863 | if (!allow_infer && type_is_global_error_set(err_set_type)) { |
| 10858 | 10864 | err_set_type = ira->codegen->builtin_types.entry_global_error_set; |
| 10859 | 10865 | continue; |
| 10860 | 10866 | } |
| ... | ... | @@ -10908,15 +10914,22 @@ static ZigType *ir_resolve_peer_types(IrAnalyze *ira, AstNode *source_node, ZigT |
| 10908 | 10914 | if (prev_err_set_type == cur_err_set_type) |
| 10909 | 10915 | continue; |
| 10910 | 10916 | |
| 10911 | | if (!resolve_inferred_error_set(ira->codegen, prev_err_set_type, cur_inst->source_node)) { |
| 10917 | bool allow_infer_prev = prev_err_set_type->data.error_set.infer_fn != nullptr && |
| 10918 | prev_err_set_type->data.error_set.infer_fn == ira->new_irb.exec->fn_entry; |
| 10919 | bool allow_infer_cur = cur_err_set_type->data.error_set.infer_fn != nullptr && |
| 10920 | cur_err_set_type->data.error_set.infer_fn == ira->new_irb.exec->fn_entry; |
| 10921 | |
| 10922 | if (!allow_infer_prev && !resolve_inferred_error_set(ira->codegen, prev_err_set_type, cur_inst->source_node)) { |
| 10912 | 10923 | return ira->codegen->builtin_types.entry_invalid; |
| 10913 | 10924 | } |
| 10914 | 10925 | |
| 10915 | | if (!resolve_inferred_error_set(ira->codegen, cur_err_set_type, cur_inst->source_node)) { |
| 10926 | if (!allow_infer_cur && !resolve_inferred_error_set(ira->codegen, cur_err_set_type, cur_inst->source_node)) { |
| 10916 | 10927 | return ira->codegen->builtin_types.entry_invalid; |
| 10917 | 10928 | } |
| 10918 | 10929 | |
| 10919 | | if (type_is_global_error_set(prev_err_set_type) || type_is_global_error_set(cur_err_set_type)) { |
| 10930 | if ((!allow_infer_prev && type_is_global_error_set(prev_err_set_type)) || |
| 10931 | (!allow_infer_cur && type_is_global_error_set(cur_err_set_type))) |
| 10932 | { |
| 10920 | 10933 | err_set_type = ira->codegen->builtin_types.entry_global_error_set; |
| 10921 | 10934 | continue; |
| 10922 | 10935 | } |
| ... | ... | @@ -11085,10 +11098,14 @@ static ZigType *ir_resolve_peer_types(IrAnalyze *ira, AstNode *source_node, ZigT |
| 11085 | 11098 | { |
| 11086 | 11099 | if (err_set_type != nullptr) { |
| 11087 | 11100 | ZigType *cur_err_set_type = cur_type->data.error_union.err_set_type; |
| 11088 | | if (!resolve_inferred_error_set(ira->codegen, cur_err_set_type, cur_inst->source_node)) { |
| 11101 | bool allow_infer = cur_err_set_type->data.error_set.infer_fn != nullptr && |
| 11102 | cur_err_set_type->data.error_set.infer_fn == ira->new_irb.exec->fn_entry; |
| 11103 | if (!allow_infer && !resolve_inferred_error_set(ira->codegen, cur_err_set_type, cur_inst->source_node)) { |
| 11089 | 11104 | return ira->codegen->builtin_types.entry_invalid; |
| 11090 | 11105 | } |
| 11091 | | if (type_is_global_error_set(cur_err_set_type) || type_is_global_error_set(err_set_type)) { |
| 11106 | if ((!allow_infer && type_is_global_error_set(cur_err_set_type)) || |
| 11107 | type_is_global_error_set(err_set_type)) |
| 11108 | { |
| 11092 | 11109 | err_set_type = ira->codegen->builtin_types.entry_global_error_set; |
| 11093 | 11110 | prev_inst = cur_inst; |
| 11094 | 11111 | continue; |