mirror of
https://github.com/ziglang/zig.git
synced 2026-02-13 21:08:36 +00:00
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.
This commit is contained in:
parent
10b1001a12
commit
10617593f8
@ -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));
|
||||
|
||||
@ -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");
|
||||
|
||||
8
test/stage1/behavior/bugs/7003.zig
Normal file
8
test/stage1/behavior/bugs/7003.zig
Normal file
@ -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);
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user