Skip to content

Commit a0f36af

Browse files
authored
Fix missing gc root in interpreter
ClangSA.jl complains in relevant part: ``` /home/keno/julia/src/interpreter.c:440:32: note: Started tracking value here jl_value_t *fldv = eval_value(args[i], s); ^~~~~~~~~~~~~~~~~~~~~~ /home/keno/julia/src/interpreter.c:441:18: note: Passing non-rooted value as argument to function that may GC if (!jl_isa(fldv, ft)) ^ ~~~~ ``` I believe it's correct.
1 parent 3a709da commit a0f36af

File tree

1 file changed

+3
-3
lines changed

1 file changed

+3
-3
lines changed

src/interpreter.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -431,13 +431,13 @@ SECT_INTERP static jl_value_t *eval_value(jl_value_t *e, interpreter_state *s)
431431
}
432432
else if (head == new_sym) {
433433
jl_value_t *thetype = eval_value(args[0], s);
434-
jl_value_t *v=NULL;
435-
JL_GC_PUSH2(&thetype, &v);
434+
jl_value_t *v=NULL, *fldv=NULL;
435+
JL_GC_PUSH3(&thetype, &v, &fldv);
436436
assert(jl_is_structtype(thetype));
437437
v = jl_new_struct_uninit((jl_datatype_t*)thetype);
438438
for (size_t i = 1; i < nargs; i++) {
439439
jl_value_t *ft = jl_field_type(thetype, i - 1);
440-
jl_value_t *fldv = eval_value(args[i], s);
440+
fldv = eval_value(args[i], s);
441441
if (!jl_isa(fldv, ft))
442442
jl_type_error("new", ft, fldv);
443443
jl_set_nth_field(v, i - 1, fldv);

0 commit comments

Comments
 (0)