| ... | @@ -9015,7 +9015,6 @@ static IrInstruction *ir_gen_node_extra(IrBuilder *irb, AstNode *node, Scope *sc | ... | @@ -9015,7 +9015,6 @@ static IrInstruction *ir_gen_node_extra(IrBuilder *irb, AstNode *node, Scope *sc |
| 9015 | if (irb->exec->first_err_trace_msg == nullptr) { | 9015 | if (irb->exec->first_err_trace_msg == nullptr) { |
| 9016 | irb->exec->first_err_trace_msg = irb->codegen->trace_err; | 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 | return result; | 9019 | return result; |
| 9021 | } | 9020 | } |
| ... | @@ -10709,10 +10708,12 @@ static ZigType *ir_resolve_peer_types(IrAnalyze *ira, AstNode *source_node, ZigT | ... | @@ -10709,10 +10708,12 @@ static ZigType *ir_resolve_peer_types(IrAnalyze *ira, AstNode *source_node, ZigT |
| 10709 | if (type_is_global_error_set(err_set_type)) { | 10708 | if (type_is_global_error_set(err_set_type)) { |
| 10710 | continue; | 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 | return ira->codegen->builtin_types.entry_invalid; | 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 | err_set_type = ira->codegen->builtin_types.entry_global_error_set; | 10717 | err_set_type = ira->codegen->builtin_types.entry_global_error_set; |
| 10717 | prev_inst = cur_inst; | 10718 | prev_inst = cur_inst; |
| 10718 | continue; | 10719 | continue; |
| ... | @@ -10830,10 +10831,12 @@ static ZigType *ir_resolve_peer_types(IrAnalyze *ira, AstNode *source_node, ZigT | ... | @@ -10830,10 +10831,12 @@ static ZigType *ir_resolve_peer_types(IrAnalyze *ira, AstNode *source_node, ZigT |
| 10830 | } | 10831 | } |
| 10831 | | 10832 | |
| 10832 | if (cur_type->id == ZigTypeIdErrorSet) { | 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 | return ira->codegen->builtin_types.entry_invalid; | 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 | err_set_type = ira->codegen->builtin_types.entry_global_error_set; | 10840 | err_set_type = ira->codegen->builtin_types.entry_global_error_set; |
| 10838 | continue; | 10841 | continue; |
| 10839 | } | 10842 | } |
| ... | @@ -10844,17 +10847,20 @@ static ZigType *ir_resolve_peer_types(IrAnalyze *ira, AstNode *source_node, ZigT | ... | @@ -10844,17 +10847,20 @@ static ZigType *ir_resolve_peer_types(IrAnalyze *ira, AstNode *source_node, ZigT |
| 10844 | update_errors_helper(ira->codegen, &errors, &errors_count); | 10847 | update_errors_helper(ira->codegen, &errors, &errors_count); |
| 10845 | | 10848 | |
| 10846 | if (err_set_type == nullptr) { | 10849 | if (err_set_type == nullptr) { |
| | 10850 | bool allow_infer = false; |
| 10847 | if (prev_type->id == ZigTypeIdErrorUnion) { | 10851 | if (prev_type->id == ZigTypeIdErrorUnion) { |
| 10848 | err_set_type = prev_type->data.error_union.err_set_type; | 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 | } else { | 10855 | } else { |
| 10850 | err_set_type = cur_type; | 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 | return ira->codegen->builtin_types.entry_invalid; | 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 | err_set_type = ira->codegen->builtin_types.entry_global_error_set; | 10864 | err_set_type = ira->codegen->builtin_types.entry_global_error_set; |
| 10859 | continue; | 10865 | continue; |
| 10860 | } | 10866 | } |
| ... | @@ -10908,15 +10914,22 @@ static ZigType *ir_resolve_peer_types(IrAnalyze *ira, AstNode *source_node, ZigT | ... | @@ -10908,15 +10914,22 @@ static ZigType *ir_resolve_peer_types(IrAnalyze *ira, AstNode *source_node, ZigT |
| 10908 | if (prev_err_set_type == cur_err_set_type) | 10914 | if (prev_err_set_type == cur_err_set_type) |
| 10909 | continue; | 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 | return ira->codegen->builtin_types.entry_invalid; | 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 | return ira->codegen->builtin_types.entry_invalid; | 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 | err_set_type = ira->codegen->builtin_types.entry_global_error_set; | 10933 | err_set_type = ira->codegen->builtin_types.entry_global_error_set; |
| 10921 | continue; | 10934 | continue; |
| 10922 | } | 10935 | } |
| ... | @@ -11085,10 +11098,14 @@ static ZigType *ir_resolve_peer_types(IrAnalyze *ira, AstNode *source_node, ZigT | ... | @@ -11085,10 +11098,14 @@ static ZigType *ir_resolve_peer_types(IrAnalyze *ira, AstNode *source_node, ZigT |
| 11085 | { | 11098 | { |
| 11086 | if (err_set_type != nullptr) { | 11099 | if (err_set_type != nullptr) { |
| 11087 | ZigType *cur_err_set_type = cur_type->data.error_union.err_set_type; | 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 | return ira->codegen->builtin_types.entry_invalid; | 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 | err_set_type = ira->codegen->builtin_types.entry_global_error_set; | 11109 | err_set_type = ira->codegen->builtin_types.entry_global_error_set; |
| 11093 | prev_inst = cur_inst; | 11110 | prev_inst = cur_inst; |
| 11094 | continue; | 11111 | continue; |