authorgravatar for thatlemon@gmail.comLemonBoy <thatlemon@gmail.com> 2020-11-06 19:35:23+01:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2020-11-13 14:29:38-07:00
log10617593f856cf0011926ea2a833d51f8d7c136d
tree326c4232276f0a1c77412037d87d6aadd8987c08
parent10b1001a124101ea06e1f3027edde51b165ff21f

stage1: Resolve ErrorUnion children types

Since the code is accessing the abi_size field compute the full type size for both err_set_type and payload_type, not only for the latter.

3 files changed, 16 insertions(+), 1 deletions(-)

src/stage1/analyze.cpp+7-1
...@@ -745,8 +745,14 @@ ZigType *get_error_union_type(CodeGen *g, ZigType *err_set_type, ZigType *payloa...@@ -745,8 +745,14 @@ ZigType *get_error_union_type(CodeGen *g, ZigType *err_set_type, ZigType *payloa
745 return existing_entry->value;745 return existing_entry->value;
746 }746 }
747747
748 Error err;
749 if ((err = type_resolve(g, err_set_type, ResolveStatusSizeKnown)))
750 return g->builtin_types.entry_invalid;
751
752 if ((err = type_resolve(g, payload_type, ResolveStatusSizeKnown)))
753 return g->builtin_types.entry_invalid;
754
748 ZigType *entry = new_type_table_entry(ZigTypeIdErrorUnion);755 ZigType *entry = new_type_table_entry(ZigTypeIdErrorUnion);
749 assert(type_is_resolved(payload_type, ResolveStatusSizeKnown));
750756
751 buf_resize(&entry->name, 0);757 buf_resize(&entry->name, 0);
752 buf_appendf(&entry->name, "%s!%s", buf_ptr(&err_set_type->name), buf_ptr(&payload_type->name));758 buf_appendf(&entry->name, "%s!%s", buf_ptr(&err_set_type->name), buf_ptr(&payload_type->name));
test/stage1/behavior.zig+1
...@@ -58,6 +58,7 @@ comptime {...@@ -58,6 +58,7 @@ comptime {
58 _ = @import("behavior/bugs/6850.zig");58 _ = @import("behavior/bugs/6850.zig");
59 _ = @import("behavior/bugs/7027.zig");59 _ = @import("behavior/bugs/7027.zig");
60 _ = @import("behavior/bugs/7047.zig");60 _ = @import("behavior/bugs/7047.zig");
61 _ = @import("behavior/bugs/7003.zig");
61 _ = @import("behavior/bugs/394.zig");62 _ = @import("behavior/bugs/394.zig");
62 _ = @import("behavior/bugs/421.zig");63 _ = @import("behavior/bugs/421.zig");
63 _ = @import("behavior/bugs/529.zig");64 _ = @import("behavior/bugs/529.zig");
test/stage1/behavior/bugs/7003.zig created+8
...@@ -0,0 +1,8 @@
1test "@Type should resolve its children types" {
2 const sparse = enum(u2) { a, b, c };
3 const dense = enum(u2) { a, b, c, d };
4
5 comptime var sparse_info = @typeInfo(anyerror!sparse);
6 sparse_info.ErrorUnion.payload = dense;
7 const B = @Type(sparse_info);
8}