| author | |
| committer | |
| log | ddb87237de60cb0feacc606d21c9dd48c5c3bd4b |
| tree | 82341819d00348e9c444eed775632a1693a6a36a |
| parent | 771dafbabaaf4cda43d722dbc4bcb7d8464b576d |
Fixes #33532 files changed, 22 insertions(+), 0 deletions(-)
src/ir.cpp+12| ... | ... | @@ -10120,6 +10120,18 @@ static ZigType *ir_resolve_peer_types(IrAnalyze *ira, AstNode *source_node, ZigT |
| 10120 | 10120 | } else { |
| 10121 | 10121 | err_set_type = cur_type; |
| 10122 | 10122 | } |
| 10123 | ||
| 10124 | if (!resolve_inferred_error_set(ira->codegen, err_set_type, cur_inst->source_node)) { | |
| 10125 | return ira->codegen->builtin_types.entry_invalid; | |
| 10126 | } | |
| 10127 | ||
| 10128 | if (type_is_global_error_set(err_set_type)) { | |
| 10129 | err_set_type = ira->codegen->builtin_types.entry_global_error_set; | |
| 10130 | continue; | |
| 10131 | } | |
| 10132 | ||
| 10133 | update_errors_helper(ira->codegen, &errors, &errors_count); | |
| 10134 | ||
| 10123 | 10135 | for (uint32_t i = 0; i < err_set_type->data.error_set.err_count; i += 1) { |
| 10124 | 10136 | ErrorTableEntry *error_entry = err_set_type->data.error_set.errors[i]; |
| 10125 | 10137 | assert(errors[error_entry->value] == nullptr); |
test/compile_errors.zig+10| ... | ... | @@ -2,6 +2,16 @@ const tests = @import("tests.zig"); |
| 2 | 2 | const builtin = @import("builtin"); |
| 3 | 3 | |
| 4 | 4 | pub fn addCases(cases: *tests.CompileErrorContext) void { |
| 5 | cases.add( | |
| 6 | "comparison with error union and error value", | |
| 7 | \\export fn entry() void { | |
| 8 | \\ var number_or_error: anyerror!i32 = error.SomethingAwful; | |
| 9 | \\ _ = number_or_error == error.SomethingAwful; | |
| 10 | \\} | |
| 11 | , | |
| 12 | "tmp.zig:3:25: error: operator not allowed for type 'anyerror!i32'", | |
| 13 | ); | |
| 14 | ||
| 5 | 15 | cases.add( |
| 6 | 16 | "switch with overlapping case ranges", |
| 7 | 17 | \\export fn entry() void { |