From 86d60712911d21894058b66dcbfd42adbef8f62a Mon Sep 17 00:00:00 2001 From: Max Horn Date: Mon, 26 Jan 2026 16:15:55 +0100 Subject: [PATCH] Make jl_reinit_foreign_type idempotent even with asserts That is, if it is called twice (e.g. because precompilation is disabled) with identical arguments, then this should not trigger an assertion. --- src/datatype.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/datatype.c b/src/datatype.c index ee947d2512064..c08e9f783eb7c 100644 --- a/src/datatype.c +++ b/src/datatype.c @@ -1042,10 +1042,14 @@ JL_DLLEXPORT int jl_reinit_foreign_type(jl_datatype_t *dt, const jl_datatype_layout_t *layout = dt->layout; jl_fielddescdyn_t * desc = (jl_fielddescdyn_t *) ((char *)layout + sizeof(*layout)); - assert(!desc->markfunc); - assert(!desc->sweepfunc); - desc->markfunc = markfunc; - desc->sweepfunc = sweepfunc; + if (desc->markfunc != markfunc) { + assert(!desc->markfunc); + desc->markfunc = markfunc; + } + if (desc->sweepfunc != sweepfunc) { + assert(!desc->sweepfunc); + desc->sweepfunc = sweepfunc; + } return 1; }