diff options
| author | Andrew Kelley <andrew@ziglang.org> | 2025-01-13 17:52:39 -0800 |
|---|---|---|
| committer | Andrew Kelley <andrew@ziglang.org> | 2025-01-15 15:11:36 -0800 |
| commit | 0cf163089e7948efa9082e519229beeb7e651f25 (patch) | |
| tree | a7944291147460766d2c8d2115ee44e127b2e424 | |
| parent | cde84c8795e8da13512098c8b19f17217e691dde (diff) | |
| download | zig-0cf163089e7948efa9082e519229beeb7e651f25.tar.gz zig-0cf163089e7948efa9082e519229beeb7e651f25.zip | |
wasm linker: fix `@tagName` for auto-numbered non-exhaustive enums
| -rw-r--r-- | src/link/Wasm/Flush.zig | 7 |
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)); |
