cbe: fix mutability issues with builtin test_functions

This commit is contained in:
Jacob Young
2023-04-25 01:08:35 -04:00
parent f1782c07a9
commit a1fcb51692
4 changed files with 21 additions and 24 deletions

View File

@@ -6439,19 +6439,25 @@ pub fn populateTestFunctions(
errdefer new_decl_arena.deinit();
const arena = new_decl_arena.allocator();
// This copy accesses the old Decl Type/Value so it must be done before `clearValues`.
const new_ty = try Type.Tag.const_slice.create(arena, try tmp_test_fn_ty.copy(arena));
const new_val = try Value.Tag.slice.create(arena, .{
.ptr = try Value.Tag.decl_ref.create(arena, array_decl_index),
.len = try Value.Tag.int_u64.create(arena, mod.test_functions.count()),
});
{
// This copy accesses the old Decl Type/Value so it must be done before `clearValues`.
const new_ty = try Type.Tag.const_slice.create(arena, try tmp_test_fn_ty.copy(arena));
const new_var = try gpa.create(Var);
errdefer gpa.destroy(new_var);
new_var.* = decl.val.castTag(.variable).?.data.*;
new_var.init = try Value.Tag.slice.create(arena, .{
.ptr = try Value.Tag.decl_ref.create(arena, array_decl_index),
.len = try Value.Tag.int_u64.create(arena, mod.test_functions.count()),
});
const new_val = try Value.Tag.variable.create(arena, new_var);
// Since we are replacing the Decl's value we must perform cleanup on the
// previous value.
decl.clearValues(mod);
decl.ty = new_ty;
decl.val = new_val;
decl.has_tv = true;
// Since we are replacing the Decl's value we must perform cleanup on the
// previous value.
decl.clearValues(mod);
decl.ty = new_ty;
decl.val = new_val;
decl.has_tv = true;
}
try decl.finalizeNewArena(&new_decl_arena);
}