aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAndrew Kelley <andrew@ziglang.org>2025-01-13 17:52:39 -0800
committerAndrew Kelley <andrew@ziglang.org>2025-01-15 15:11:36 -0800
commit0cf163089e7948efa9082e519229beeb7e651f25 (patch)
treea7944291147460766d2c8d2115ee44e127b2e424 /src
parentcde84c8795e8da13512098c8b19f17217e691dde (diff)
downloadzig-0cf163089e7948efa9082e519229beeb7e651f25.tar.gz
zig-0cf163089e7948efa9082e519229beeb7e651f25.zip
wasm linker: fix `@tagName` for auto-numbered non-exhaustive enums
Diffstat (limited to 'src')
-rw-r--r--src/link/Wasm/Flush.zig7
1 files changed, 4 insertions, 3 deletions
diff --git a/src/link/Wasm/Flush.zig b/src/link/Wasm/Flush.zig
index b6627bff07..18054de5e8 100644
--- a/src/link/Wasm/Flush.zig
+++ b/src/link/Wasm/Flush.zig
@@ -1909,14 +1909,15 @@ fn emitTagNameFunction(
const zcu = comp.zcu.?;
const ip = &zcu.intern_pool;
const enum_type = ip.loadEnumType(enum_type_ip);
+ const tag_values = enum_type.values.get(ip);
try code.ensureUnusedCapacity(gpa, 7 * 5 + 6 + 1 * 6);
appendReservedUleb32(code, 0); // no locals
const slice_abi_size = 8;
const encoded_alignment = @ctz(@as(u32, 4));
- if (enum_type.tag_mode == .auto) {
- // Then it's a direct table lookup.
+ if (tag_values.len == 0) {
+ // Then it's auto-numbered and therefore a direct table lookup.
code.appendAssumeCapacity(@intFromEnum(std.wasm.Opcode.local_get));
appendReservedUleb32(code, 0);
@@ -1948,7 +1949,7 @@ fn emitTagNameFunction(
code.appendAssumeCapacity(@intFromEnum(std.wasm.Opcode.block));
code.appendAssumeCapacity(@intFromEnum(outer_block_type));
- for (enum_type.values.get(ip), 0..) |tag_value, tag_index| {
+ for (tag_values, 0..) |tag_value, tag_index| {
// block for this if case
code.appendAssumeCapacity(@intFromEnum(std.wasm.Opcode.block));
code.appendAssumeCapacity(@intFromEnum(std.wasm.BlockType.empty));