aboutsummaryrefslogtreecommitdiff
path: root/src/codegen.zig
diff options
context:
space:
mode:
authorJacob Young <jacobly0@users.noreply.github.com>2024-02-16 03:13:25 +0100
committerAndrew Kelley <andrew@ziglang.org>2024-02-16 00:27:25 -0800
commit6f08e172299320a3b243998878b38b0b3f43d8d5 (patch)
tree22ca949d513aa57651081ce831875e322666eb2a /src/codegen.zig
parent0183b44bb10751c46bd520e673726a66c027b477 (diff)
downloadzig-6f08e172299320a3b243998878b38b0b3f43d8d5.tar.gz
zig-6f08e172299320a3b243998878b38b0b3f43d8d5.zip
InternPool: make more use of `NullTerminatedString.Slice`
This should avoid the random pointer invalidation crashes. Closes #18954
Diffstat (limited to 'src/codegen.zig')
-rw-r--r--src/codegen.zig6
1 files changed, 4 insertions, 2 deletions
diff --git a/src/codegen.zig b/src/codegen.zig
index f16bf301a8..118bab4be9 100644
--- a/src/codegen.zig
+++ b/src/codegen.zig
@@ -119,6 +119,7 @@ pub fn generateLazySymbol(
const comp = bin_file.comp;
const zcu = comp.module.?;
+ const ip = &zcu.intern_pool;
const target = comp.root_mod.resolved_target.result;
const endian = target.cpu.arch.endian();
const gpa = comp.gpa;
@@ -151,8 +152,9 @@ pub fn generateLazySymbol(
return Result.ok;
} else if (lazy_sym.ty.zigTypeTag(zcu) == .Enum) {
alignment.* = .@"1";
- for (lazy_sym.ty.enumFields(zcu)) |tag_name_ip| {
- const tag_name = zcu.intern_pool.stringToSlice(tag_name_ip);
+ const tag_names = lazy_sym.ty.enumFields(zcu);
+ for (0..tag_names.len) |tag_index| {
+ const tag_name = zcu.intern_pool.stringToSlice(tag_names.get(ip)[tag_index]);
try code.ensureUnusedCapacity(tag_name.len + 1);
code.appendSliceAssumeCapacity(tag_name);
code.appendAssumeCapacity(0);