diff options
| author | Krzysztof Wolicki <der.teufel.mail@gmail.com> | 2025-07-30 20:18:49 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-07-30 18:18:49 +0000 |
| commit | 3d639481d9001df391744720b756b7f97dce2c01 (patch) | |
| tree | bcb5fb9a98314ff95369def839afea8aed91451b /src/Sema.zig | |
| parent | cf7a28febbbe877003d8d4f9a13ceb94698c1e3e (diff) | |
| download | zig-3d639481d9001df391744720b756b7f97dce2c01.tar.gz zig-3d639481d9001df391744720b756b7f97dce2c01.zip | |
Sema: disallow tags on non-auto unions when reifying (#23488)
Diffstat (limited to 'src/Sema.zig')
| -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 2483f313a8..63c39b3bb6 100644 --- a/src/Sema.zig +++ b/src/Sema.zig @@ -20630,6 +20630,16 @@ fn zirReify( } const layout = try sema.interpretBuiltinType(block, operand_src, layout_val, std.builtin.Type.ContainerLayout); + const has_tag = tag_type_val.optionalValue(zcu) != null; + + if (has_tag) { + switch (layout) { + .@"extern" => return sema.fail(block, src, "extern union does not support enum tag type", .{}), + .@"packed" => return sema.fail(block, src, "packed union does not support enum tag type", .{}), + .auto => {}, + } + } + const fields_arr = try sema.derefSliceAsArray(block, operand_src, fields_val, .{ .simple = .union_fields }); return sema.reifyUnion(block, inst, src, layout, tag_type_val, fields_arr, name_strategy); |
