https://gcc.gnu.org/bugzilla/show_bug.cgi?id=83372

--- Comment #13 from David Malcolm <dmalcolm at gcc dot gnu.org> ---
(In reply to David Malcolm from comment #12)
> Turning the cgraphunit.c:493
>   gcc_collect ();
> into
>   selftest::forcibly_ggc_collect ();
> and removing the:
>   --param ggc-min-expand=0 --param ggc-min-heapsize=0
> allows it to be reproduced in a few seconds, rather than many minutes.

Sadly, I got it wrong; I wasn't honoring the "nocollect" flag here; reproducing
this still takes a long time, and I tend to see:
  virtual memory exhausted: can't allocate 4072 bytes.
from gdb which is making it hard to debug.

That said, I managed to trap this under the gdb; it's failing here:

#4  0x0000000000a181f1 in gt_ggc_mx<deferred_access_check> (v=0x7ffe425ca6c0)
at ../../src/gcc/vec.h:1203
1203        gt_ggc_mx ((*v)[i]);
(gdb) p *v
$2 = {m_vecpfx = {m_alloc = 1919901535, m_using_auto_storage = 0, m_num =
1953709151}, m_vecdata = {{binfo = 0x75665f73693a3a64, 
      decl = 0x763c6e6f6974636e, diag_decl = 0x26262a282064696f, loc =
1803036713}}}

#6  0x0000000000a15a3c in gt_ggc_mx_tree_check (x_p=0x7ffe425cd3f0) at
./gt-cp-parser.h:57
57            gt_ggc_m_32vec_deferred_access_check_va_gc_ ((*x).checks);
(gdb) list
52      {
53        struct tree_check * const x = (struct tree_check *)x_p;
54        if (ggc_test_and_set_mark (x))
55          {
56            gt_ggc_m_9tree_node ((*x).value);
57            gt_ggc_m_32vec_deferred_access_check_va_gc_ ((*x).checks);
58            gt_ggc_m_9tree_node ((*x).qualifying_scope);
59          }
60      }

(gdb) p *x
$4 = {value = 0x7ffe4295b7e0, checks = 0x7ffe425ca6c0, qualifying_scope = 0x0}

(gdb) p x->value
$5 = (tree) 0x7ffe4295b7e0

(gdb) call debug (x->value)
[tcsetpgrp failed in terminal_inferior: No such process]

    full-name "class std::unique_ptr<xkb_state, void (*)(xkb_state*)>"
    needs-constructor needs-destructor X() has-type-conversion X(constX&)
this=(X&) n_parents=0 use_template=1 interface-unknown

Given that it's failing when collecting a deferred_access_check, it sounds like
this could be a dup of Nathan's issue:
  [PR c++/84263] GC ICE with decltype
    https://gcc.gnu.org/ml/gcc-patches/2018-02/msg00435.html
where that patch fixes a GC issue with deferring_access_checks.

I'm going to try with and without Nathan's patch to see if his patch affects
it.

Reply via email to