| ... | ... | @@ -4767,15 +4767,25 @@ pub fn populateTestFunctions(mod: *Module) !void { |
| 4767 | 4767 | try mod.linkerUpdateDecl(array_decl); |
| 4768 | 4768 | |
| 4769 | 4769 | { |
| 4770 | | var arena_instance = decl.value_arena.?.promote(gpa); |
| 4771 | | defer decl.value_arena.?.* = arena_instance.state; |
| 4772 | | const arena = &arena_instance.allocator; |
| 4770 | var new_decl_arena = std.heap.ArenaAllocator.init(gpa); |
| 4771 | errdefer new_decl_arena.deinit(); |
| 4772 | const arena = &new_decl_arena.allocator; |
| 4773 | 4773 | |
| 4774 | | decl.ty = try Type.Tag.const_slice.create(arena, try tmp_test_fn_ty.copy(arena)); |
| 4775 | | decl.val = try Value.Tag.slice.create(arena, .{ |
| 4774 | // This copy accesses the old Decl Type/Value so it must be done before `clearValues`. |
| 4775 | const new_ty = try Type.Tag.const_slice.create(arena, try tmp_test_fn_ty.copy(arena)); |
| 4776 | const new_val = try Value.Tag.slice.create(arena, .{ |
| 4776 | 4777 | .ptr = try Value.Tag.decl_ref.create(arena, array_decl), |
| 4777 | 4778 | .len = try Value.Tag.int_u64.create(arena, mod.test_functions.count()), |
| 4778 | 4779 | }); |
| 4780 | |
| 4781 | // Since we are replacing the Decl's value we must perform cleanup on the |
| 4782 | // previous value. |
| 4783 | decl.clearValues(gpa); |
| 4784 | decl.ty = new_ty; |
| 4785 | decl.val = new_val; |
| 4786 | decl.has_tv = true; |
| 4787 | |
| 4788 | try decl.finalizeNewArena(&new_decl_arena); |
| 4779 | 4789 | } |
| 4780 | 4790 | try mod.linkerUpdateDecl(decl); |
| 4781 | 4791 | } |