diff --git a/src/stage1/analyze.cpp b/src/stage1/analyze.cpp index 9e0c0d5df8..547d2d9ae2 100644 --- a/src/stage1/analyze.cpp +++ b/src/stage1/analyze.cpp @@ -745,8 +745,14 @@ ZigType *get_error_union_type(CodeGen *g, ZigType *err_set_type, ZigType *payloa return existing_entry->value; } + Error err; + if ((err = type_resolve(g, err_set_type, ResolveStatusSizeKnown))) + return g->builtin_types.entry_invalid; + + if ((err = type_resolve(g, payload_type, ResolveStatusSizeKnown))) + return g->builtin_types.entry_invalid; + ZigType *entry = new_type_table_entry(ZigTypeIdErrorUnion); - assert(type_is_resolved(payload_type, ResolveStatusSizeKnown)); buf_resize(&entry->name, 0); buf_appendf(&entry->name, "%s!%s", buf_ptr(&err_set_type->name), buf_ptr(&payload_type->name)); diff --git a/test/stage1/behavior.zig b/test/stage1/behavior.zig index 8aaba38d9a..86e9619d26 100644 --- a/test/stage1/behavior.zig +++ b/test/stage1/behavior.zig @@ -58,6 +58,7 @@ comptime { _ = @import("behavior/bugs/6850.zig"); _ = @import("behavior/bugs/7027.zig"); _ = @import("behavior/bugs/7047.zig"); + _ = @import("behavior/bugs/7003.zig"); _ = @import("behavior/bugs/394.zig"); _ = @import("behavior/bugs/421.zig"); _ = @import("behavior/bugs/529.zig"); diff --git a/test/stage1/behavior/bugs/7003.zig b/test/stage1/behavior/bugs/7003.zig new file mode 100644 index 0000000000..75fc9068b1 --- /dev/null +++ b/test/stage1/behavior/bugs/7003.zig @@ -0,0 +1,8 @@ +test "@Type should resolve its children types" { + const sparse = enum(u2) { a, b, c }; + const dense = enum(u2) { a, b, c, d }; + + comptime var sparse_info = @typeInfo(anyerror!sparse); + sparse_info.ErrorUnion.payload = dense; + const B = @Type(sparse_info); +}