diff options
| -rw-r--r-- | src/Module.zig | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/src/Module.zig b/src/Module.zig index 435577cf96..1b64f9f72e 100644 --- a/src/Module.zig +++ b/src/Module.zig @@ -6322,11 +6322,12 @@ pub fn populateTestFunctions( main_progress_node: *std.Progress.Node, ) !void { const gpa = mod.gpa; + const ip = &mod.intern_pool; const builtin_pkg = mod.main_pkg.table.get("builtin").?; const builtin_file = (mod.importPkg(builtin_pkg) catch unreachable).file; const root_decl = mod.declPtr(builtin_file.root_decl.unwrap().?); const builtin_namespace = mod.namespacePtr(root_decl.src_namespace); - const test_functions_str = try mod.intern_pool.getOrPutString(gpa, "test_functions"); + const test_functions_str = try ip.getOrPutString(gpa, "test_functions"); const decl_index = builtin_namespace.decls.getKeyAdapted( test_functions_str, DeclAdapter{ .mod = mod }, @@ -6362,7 +6363,9 @@ pub fn populateTestFunctions( for (test_fn_vals, mod.test_functions.keys()) |*test_fn_val, test_decl_index| { const test_decl = mod.declPtr(test_decl_index); - const test_decl_name = mod.intern_pool.stringToSlice(test_decl.name); + // Protects test_decl_name from being invalidated during call to intern() below. + try ip.string_bytes.ensureUnusedCapacity(gpa, ip.stringToSlice(test_decl.name).len + 10); + const test_decl_name = ip.stringToSlice(test_decl.name); const test_name_decl_index = n: { const test_name_decl_ty = try mod.arrayType(.{ .len = test_decl_name.len, @@ -6444,7 +6447,7 @@ pub fn populateTestFunctions( .addr = .{ .decl = array_decl_index }, .len = (try mod.intValue(Type.usize, mod.test_functions.count())).toIntern(), } }); - mod.intern_pool.mutateVarInit(decl.val.toIntern(), new_init); + ip.mutateVarInit(decl.val.toIntern(), new_init); // Since we are replacing the Decl's value we must perform cleanup on the // previous value. |
