authorgravatar for git@vexu.euVeikka Tuominen <git@vexu.eu> 2023-01-06 18:21:21+02:00
committergravatar for git@vexu.euVeikka Tuominen <git@vexu.eu> 2023-01-10 18:38:44+02:00
logfd6b79e67f0cf91a72c121fc6fd484a03f487506
tree41f1130e26e352a696d4dbfa4d65d48a04e34495
parentf7ade7e63bfe63258807df6a97e222072cde1a35

Sema: restore status on layout resolution failure

`resolveTypeFields` and `resolveTypeFully` already do this. Closes #14059

1 files changed, 10 insertions(+), 0 deletions(-)

src/Sema.zig+10
......@@ -29847,6 +29847,11 @@ fn resolveStructLayout(sema: *Sema, ty: Type) CompileError!void {
2984729847 },
2984829848 .have_layout, .fully_resolved_wip, .fully_resolved => return,
2984929849 }
29850 const prev_status = struct_obj.status;
29851 errdefer if (struct_obj.status == .layout_wip) {
29852 struct_obj.status = prev_status;
29853 };
29854
2985029855 struct_obj.status = .layout_wip;
2985129856 for (struct_obj.fields.values()) |field, i| {
2985229857 sema.resolveTypeLayout(field.ty) catch |err| switch (err) {
......@@ -30026,6 +30031,11 @@ fn resolveUnionLayout(sema: *Sema, ty: Type) CompileError!void {
3002630031 },
3002730032 .have_layout, .fully_resolved_wip, .fully_resolved => return,
3002830033 }
30034 const prev_status = union_obj.status;
30035 errdefer if (union_obj.status == .layout_wip) {
30036 union_obj.status = prev_status;
30037 };
30038
3002930039 union_obj.status = .layout_wip;
3003030040 for (union_obj.fields.values()) |field, i| {
3003130041 sema.resolveTypeLayout(field.ty) catch |err| switch (err) {