jit: fix ICE with GCC_JIT_BOOL_OPTION_SELFCHECK_GC since r278084 (PR jit/92483)
authorDavid Malcolm <dmalcolm@redhat.com>
Wed, 20 Nov 2019 17:51:41 +0000 (17:51 +0000)
committerDavid Malcolm <dmalcolm@gcc.gnu.org>
Wed, 20 Nov 2019 17:51:41 +0000 (17:51 +0000)
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.

Fixes all 60 FAILs in jit.sum, restoring the number of PASS results
from 2033 to 10469.

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.

From-SVN: r278515

gcc/jit/ChangeLog
gcc/jit/jit-playback.c

index 110367ef835998b673484dc42478f80a585131cd..8eb6a7f5df8d35e1cfc84e3cbf9270906c300000 100644 (file)
@@ -1,3 +1,9 @@
+2019-11-20  David Malcolm  <dmalcolm@redhat.com>
+
+       PR jit/92483
+       * jit-playback.c (gcc::jit::playback::context::make_fake_args):
+       Update GCC_JIT_BOOL_OPTION_SELFCHECK_GC for new --param syntax.
+
 2019-08-13  Richard Sandiford  <richard.sandiford@arm.com>
 
        PR middle-end/91421
index 9eeb2a71892ab29bf44a883289b1193c9e305ea6..c043d6964eac49f1b31e44be044b57f936c42583 100644 (file)
@@ -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))