Skip to content

Commit 32ff279

Browse files
committed
add some missed gc roots
1 parent 516d8aa commit 32ff279

File tree

1 file changed

+9
-13
lines changed

1 file changed

+9
-13
lines changed

src/gf.c

Lines changed: 9 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1558,7 +1558,7 @@ static jl_lambda_info_t *jl_mt_assoc_by_type(jl_methtable_t *mt, jl_datatype_t *
15581558
jl_svec_t *env = jl_emptysvec;
15591559
jl_method_t *func = NULL;
15601560
jl_tupletype_t *sig = NULL;
1561-
JL_GC_PUSH4(&env, &m, &func, &tt);
1561+
JL_GC_PUSH4(&env, &m, &func, &sig);
15621562

15631563
m = jl_typemap_assoc_by_type(mt->defs, tt, &env, inexact, 1, 0);
15641564
if (m == NULL) {
@@ -1569,7 +1569,7 @@ static jl_lambda_info_t *jl_mt_assoc_by_type(jl_methtable_t *mt, jl_datatype_t *
15691569
sig = join_tsig(tt, m->sig);
15701570
jl_lambda_info_t *nf;
15711571
if (!cache)
1572-
nf = jl_get_specialized(m->func.method, tt, env);
1572+
nf = jl_get_specialized(m->func.method, sig, env);
15731573
else
15741574
nf = cache_method(mt, &mt->cache, (jl_value_t*)mt, sig, tt, m, env);
15751575
JL_GC_POP();
@@ -2293,7 +2293,7 @@ jl_value_t *jl_gf_invoke(jl_tupletype_t *types0, jl_value_t **args, size_t nargs
22932293
jl_tupletype_t *tt = NULL;
22942294
jl_tupletype_t *types = NULL;
22952295
jl_tupletype_t *sig = NULL;
2296-
JL_GC_PUSH4(&types, &tpenv, &newsig, &sig);
2296+
JL_GC_PUSH5(&types, &tpenv, &newsig, &sig, &tt);
22972297
jl_value_t *gf = args[0];
22982298
types = (jl_datatype_t*)jl_argtype_with_function(gf, (jl_tupletype_t*)types0);
22992299
jl_methtable_t *mt = jl_gf_mtable(gf);
@@ -2312,15 +2312,7 @@ jl_value_t *jl_gf_invoke(jl_tupletype_t *types0, jl_value_t **args, size_t nargs
23122312
mfunc = NULL;
23132313
else
23142314
mfunc = jl_typemap_assoc_exact(m->func.method->invokes, args, nargs, jl_cachearg_offset(mt));
2315-
if (mfunc != NULL) {
2316-
if (mfunc->inInference || mfunc->inCompile) {
2317-
// if inference is running on this function, return a copy
2318-
// of the function to be compiled without inference and run.
2319-
JL_GC_POP();
2320-
return jl_call_unspecialized(mfunc->sparam_vals, jl_get_unspecialized(mfunc), args, nargs);
2321-
}
2322-
}
2323-
else {
2315+
if (mfunc == NULL) {
23242316
tt = arg_type_tuple(args, nargs);
23252317
if (m->tvars != jl_emptysvec) {
23262318
jl_value_t *ti =
@@ -2336,8 +2328,12 @@ jl_value_t *jl_gf_invoke(jl_tupletype_t *types0, jl_value_t **args, size_t nargs
23362328

23372329
mfunc = cache_method(mt, &m->func.method->invokes, m->func.value, sig, tt, m, tpenv);
23382330
}
2339-
23402331
JL_GC_POP();
2332+
if (mfunc->inInference || mfunc->inCompile) {
2333+
// if inference is running on this function, return a copy
2334+
// of the function to be compiled without inference and run.
2335+
return jl_call_unspecialized(mfunc->sparam_vals, jl_get_unspecialized(mfunc), args, nargs);
2336+
}
23412337
return jl_call_method_internal(mfunc, args, nargs);
23422338
}
23432339

0 commit comments

Comments
 (0)