| ... | @@ -1757,6 +1757,32 @@ static ZigType *analyze_fn_type(CodeGen *g, AstNode *proto_node, Scope *child_sc | ... | @@ -1757,6 +1757,32 @@ static ZigType *analyze_fn_type(CodeGen *g, AstNode *proto_node, Scope *child_sc |
| 1757 | return g->builtin_types.entry_invalid; | 1757 | return g->builtin_types.entry_invalid; |
| 1758 | } | 1758 | } |
| 1759 | | 1759 | |
| | 1760 | switch (specified_return_type->id) { |
| | 1761 | case ZigTypeIdInvalid: |
| | 1762 | zig_unreachable(); |
| | 1763 | |
| | 1764 | case ZigTypeIdUndefined: |
| | 1765 | case ZigTypeIdNull: |
| | 1766 | case ZigTypeIdArgTuple: |
| | 1767 | add_node_error(g, fn_proto->return_type, |
| | 1768 | buf_sprintf("return type '%s' not allowed", buf_ptr(&specified_return_type->name))); |
| | 1769 | return g->builtin_types.entry_invalid; |
| | 1770 | |
| | 1771 | case ZigTypeIdOpaque: |
| | 1772 | { |
| | 1773 | ErrorMsg* msg = add_node_error(g, fn_proto->return_type, |
| | 1774 | buf_sprintf("opaque return type '%s' not allowed", buf_ptr(&specified_return_type->name))); |
| | 1775 | Tld *tld = find_decl(g, &fn_entry->fndef_scope->base, &specified_return_type->name); |
| | 1776 | if (tld != nullptr) { |
| | 1777 | add_error_note(g, msg, tld->source_node, buf_sprintf("declared here")); |
| | 1778 | } |
| | 1779 | return g->builtin_types.entry_invalid; |
| | 1780 | } |
| | 1781 | |
| | 1782 | default: |
| | 1783 | break; |
| | 1784 | } |
| | 1785 | |
| 1760 | if (fn_proto->auto_err_set) { | 1786 | if (fn_proto->auto_err_set) { |
| 1761 | ZigType *inferred_err_set_type = get_auto_err_set_type(g, fn_entry); | 1787 | ZigType *inferred_err_set_type = get_auto_err_set_type(g, fn_entry); |
| 1762 | if ((err = type_resolve(g, specified_return_type, ResolveStatusSizeKnown))) | 1788 | if ((err = type_resolve(g, specified_return_type, ResolveStatusSizeKnown))) |
| ... | @@ -1782,15 +1808,11 @@ static ZigType *analyze_fn_type(CodeGen *g, AstNode *proto_node, Scope *child_sc | ... | @@ -1782,15 +1808,11 @@ static ZigType *analyze_fn_type(CodeGen *g, AstNode *proto_node, Scope *child_sc |
| 1782 | | 1808 | |
| 1783 | switch (fn_type_id.return_type->id) { | 1809 | switch (fn_type_id.return_type->id) { |
| 1784 | case ZigTypeIdInvalid: | 1810 | case ZigTypeIdInvalid: |
| 1785 | zig_unreachable(); | | |
| 1786 | | | |
| 1787 | case ZigTypeIdUndefined: | 1811 | case ZigTypeIdUndefined: |
| 1788 | case ZigTypeIdNull: | 1812 | case ZigTypeIdNull: |
| 1789 | case ZigTypeIdArgTuple: | 1813 | case ZigTypeIdArgTuple: |
| 1790 | case ZigTypeIdOpaque: | 1814 | case ZigTypeIdOpaque: |
| 1791 | add_node_error(g, fn_proto->return_type, | 1815 | zig_unreachable(); |
| 1792 | buf_sprintf("return type '%s' not allowed", buf_ptr(&fn_type_id.return_type->name))); | | |
| 1793 | return g->builtin_types.entry_invalid; | | |
| 1794 | | 1816 | |
| 1795 | case ZigTypeIdComptimeFloat: | 1817 | case ZigTypeIdComptimeFloat: |
| 1796 | case ZigTypeIdComptimeInt: | 1818 | case ZigTypeIdComptimeInt: |