Commit 57edd4dcb3

Andrew Kelley <superjoe30@gmail.com>
2018-02-09 00:13:07
error sets - fix bad value for constant error literal
1 parent fee8757
Changed files (2)
src
test
cases
src/ir.cpp
@@ -12308,7 +12308,7 @@ static TypeTableEntry *ir_analyze_instruction_field_ptr(IrAnalyze *ira, IrInstru
                 if (!resolve_inferred_error_set(ira, child_type, field_ptr_instruction->base.source_node)) {
                     return ira->codegen->builtin_types.entry_invalid;
                 }
-                ErrorTableEntry *err_entry = find_err_table_entry(child_type, field_name);
+                err_entry = find_err_table_entry(child_type, field_name);
                 if (err_entry == nullptr) {
                     ir_add_error(ira, &field_ptr_instruction->base,
                         buf_sprintf("no error named '%s' in '%s'", buf_ptr(field_name), buf_ptr(&child_type->name)));
test/cases/error.zig
@@ -108,3 +108,18 @@ fn testErrorSetType() void {
         error.FileNotFound => unreachable,
     }
 }
+
+
+test "explicit error set cast" {
+    testExplicitErrorSetCast(Set1.A);
+    comptime testExplicitErrorSetCast(Set1.A);
+}
+
+const Set1 = error{A, B};
+const Set2 = error{A, C};
+
+fn testExplicitErrorSetCast(set1: Set1) void {
+    var x = Set2(set1);
+    var y = Set1(x);
+    assert(y == error.A);
+}