Skip to content

Commit bcb103a

Browse files
topolarityKristofferC
authored andcommitted
Fix jl_set_precompile_field_replace for 0-size fields (#58155)
(cherry picked from commit 7341098)
1 parent 1515913 commit bcb103a

File tree

2 files changed

+7
-2
lines changed

2 files changed

+7
-2
lines changed

src/staticdata.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1794,7 +1794,7 @@ static void jl_write_values(jl_serializer_state *s) JL_GC_DISABLED
17941794
tot = offset;
17951795
size_t fsz = jl_field_size(t, i);
17961796
jl_value_t *replace = (jl_value_t*)ptrhash_get(&bits_replace, (void*)slot);
1797-
if (replace != HT_NOTFOUND) {
1797+
if (replace != HT_NOTFOUND && fsz > 0) {
17981798
assert(t->name->mutabl && !jl_field_isptr(t, i));
17991799
jl_value_t *rty = jl_typeof(replace);
18001800
size_t sz = jl_datatype_size(rty);
@@ -3013,7 +3013,7 @@ static void jl_save_system_image_to_stream(ios_t *f, jl_array_t *mod_array,
30133013
if (jl_field_isptr(st, field)) {
30143014
record_field_change((jl_value_t**)fldaddr, newval);
30153015
}
3016-
else {
3016+
else if (jl_field_size(st, field) > 0) {
30173017
// replace the bits
30183018
ptrhash_put(&bits_replace, (void*)fldaddr, newval);
30193019
// and any pointers inside

test/precompile.jl

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,11 @@ precompile_test_harness(false) do dir
105105
process_state_calls = 0
106106
@assert process_state() === process_state()
107107
@assert process_state_calls === 0
108+
109+
const empty_state = Base.OncePerProcess{Nothing}() do
110+
return nothing
111+
end
112+
@assert empty_state() === nothing
108113
end
109114
""")
110115
write(Foo2_file,

0 commit comments

Comments
 (0)