On Thu, Jul 27, 2017 at 12:12 PM, Martin Liška <mli...@suse.cz> wrote: > Hello. > > As reported in mentioned PR, we segfault in gcov tool when one uses -a. It's > caused by fact > that vectors blocks and block_lists have indices kept in sync and as one > removes an element > from blocks via: > blocked.erase (it); > > Then calling recursively the same function breaks the synchronization. The > patch was originally > written by Joshua (adding him to CC). If I'm correct calling: > > - unblock (u, blocked, block_lists); > > does not make sense as we've already removed 'u'. Plus one needs to put > content of block_lists[index] > to a separate vector in order to not to break iteration. > > Patch can bootstrap on ppc64le-redhat-linux and survives regression tests. > And fixed the problem reported in opensuse bugzilla (mentioned in the GCC > bugzilla PR). > > Ready to be installed?
Looks good to me but please wait for Joshua to confirm. Did you manage to extract a testcase? Thanks, Richard. > Martin > > > gcc/ChangeLog: > > 2017-07-26 Martin Liska <mli...@suse.cz> > > PR gcov-profile/81561 > * gcov.c (unblock): Make unblocking safe as we need to preserve > index correspondence of blocks and block_lists. > --- > gcc/gcov.c | 10 +++++++--- > 1 file changed, 7 insertions(+), 3 deletions(-) > > >