Sema: restore status on layout resolution failure

`resolveTypeFields` and `resolveTypeFully` already do this.

Closes #14059
This commit is contained in:
Veikka Tuominen
2023-01-06 18:21:21 +02:00
parent f7ade7e63b
commit fd6b79e67f

View File

@@ -29847,6 +29847,11 @@ fn resolveStructLayout(sema: *Sema, ty: Type) CompileError!void {
},
.have_layout, .fully_resolved_wip, .fully_resolved => return,
}
const prev_status = struct_obj.status;
errdefer if (struct_obj.status == .layout_wip) {
struct_obj.status = prev_status;
};
struct_obj.status = .layout_wip;
for (struct_obj.fields.values()) |field, i| {
sema.resolveTypeLayout(field.ty) catch |err| switch (err) {
@@ -30026,6 +30031,11 @@ fn resolveUnionLayout(sema: *Sema, ty: Type) CompileError!void {
},
.have_layout, .fully_resolved_wip, .fully_resolved => return,
}
const prev_status = union_obj.status;
errdefer if (union_obj.status == .layout_wip) {
union_obj.status = prev_status;
};
union_obj.status = .layout_wip;
for (union_obj.fields.values()) |field, i| {
sema.resolveTypeLayout(field.ty) catch |err| switch (err) {