Since r278084 (part of the params refactoring), most of libgccjit's test suite has been ICEing.
The root cause is that jit-playback.c injects params to its fake_args here: /* Aggressively garbage-collect, to shake out bugs: */ if (get_bool_option (GCC_JIT_BOOL_OPTION_SELFCHECK_GC)) { ADD_ARG ("--param"); ADD_ARG ("ggc-min-expand=0"); ADD_ARG ("--param"); ADD_ARG ("ggc-min-heapsize=0"); } (building a vec of char * where the char * are allocated using xstrdup) and r278084 added this logic to decode_cmdline_options_to_array: 964 /* Interpret "--param" "key=name" as "--param=key=name". */ 965 const char *needle = "--param"; 966 if (i + 1 < argc && strcmp (opt, needle) == 0) 967 { 968 const char *replacement 969 = opts_concat (needle, "=", argv[i + 1], NULL); 970 argv[++i] = replacement; 971 } Note that at line 970 it manipulates the argv in-place, inserting a new option allocated with opts_concat, which uses opts_obstack (itself initialized from toplev::main). jit-playback.c cleans up its fake arguments using "free", at which point we have a free of the middle of an obstack and an ICE. This patch fixes the issue by using the new syntax for the params. Successfully bootstrapped & regrtested on x86_64-pc-linux-gnu. Fixes all 60 FAILs in jit.sum, restoring the number of PASS results from 2033 to 10469. Committed to trunk as r278515. gcc/jit/ChangeLog: PR jit/92483 * jit-playback.c (gcc::jit::playback::context::make_fake_args): Update GCC_JIT_BOOL_OPTION_SELFCHECK_GC for new --param syntax. --- gcc/jit/jit-playback.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/gcc/jit/jit-playback.c b/gcc/jit/jit-playback.c index 9eeb2a7..c043d69 100644 --- a/gcc/jit/jit-playback.c +++ b/gcc/jit/jit-playback.c @@ -2273,10 +2273,8 @@ make_fake_args (vec <char *> *argvec, /* Aggressively garbage-collect, to shake out bugs: */ if (get_bool_option (GCC_JIT_BOOL_OPTION_SELFCHECK_GC)) { - ADD_ARG ("--param"); - ADD_ARG ("ggc-min-expand=0"); - ADD_ARG ("--param"); - ADD_ARG ("ggc-min-heapsize=0"); + ADD_ARG ("--param=ggc-min-expand=0"); + ADD_ARG ("--param=ggc-min-heapsize=0"); } if (get_bool_option (GCC_JIT_BOOL_OPTION_DUMP_EVERYTHING)) -- 1.8.5.3