diff options
| author | Veikka Tuominen <git@vexu.eu> | 2023-01-06 18:21:21 +0200 |
|---|---|---|
| committer | Veikka Tuominen <git@vexu.eu> | 2023-01-10 18:38:44 +0200 |
| commit | fd6b79e67f0cf91a72c121fc6fd484a03f487506 (patch) | |
| tree | 41f1130e26e352a696d4dbfa4d65d48a04e34495 /src | |
| parent | f7ade7e63bfe63258807df6a97e222072cde1a35 (diff) | |
| download | zig-fd6b79e67f0cf91a72c121fc6fd484a03f487506.tar.gz zig-fd6b79e67f0cf91a72c121fc6fd484a03f487506.zip | |
Sema: restore status on layout resolution failure
`resolveTypeFields` and `resolveTypeFully` already do this.
Closes #14059
Diffstat (limited to 'src')
| -rw-r--r-- | src/Sema.zig | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/src/Sema.zig b/src/Sema.zig index 95de857616..6fa2f92dd7 100644 --- a/src/Sema.zig +++ b/src/Sema.zig @@ -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) { |
