Skip to content

Commit e63cebd

Browse files
Vexumatu3ba
authored andcommitted
Sema: restore status on layout resolution failure
`resolveTypeFields` and `resolveTypeFully` already do this. Closes ziglang#14059
1 parent eb68c2f commit e63cebd

File tree

1 file changed

+10
-0
lines changed

1 file changed

+10
-0
lines changed

src/Sema.zig

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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) {

0 commit comments

Comments
 (0)