Fix latent bug in ada-lang.c:remove_extra_symbols
I believe ada-lang.c:remove_extra_symbols has a latent bug. This function loops over a vector of symbols, removing duplicates according to some criteria. At the end of the loop it does: if (remove_p) syms->erase (syms->begin () + i); i += 1; However, this seems wrong to me -- when removing the i'th element, this code still increments "i", thus skipping an element. At first I thought this was a regression from the patches to remove cleanups from ada-lang.c (this was when std::vector was introduced); but I found that instead the bug seems to be older: if (remove_p) { for (j = i + 1; j < nsyms; j += 1) syms[j - 1] = syms[j]; nsyms -= 1; } i += 1; No test, as I don't know how to write one. As this is Ada-specific, and was already reviewed internally by Joel, I am checking it in. gdb/ChangeLog 2020-09-09 Tom Tromey <tromey@adacore.com> * ada-lang.c (remove_extra_symbols): Do not increment when removing an element
This commit is contained in:
parent
10556cdc8e
commit
1b788fb6e9
2 changed files with 7 additions and 2 deletions
|
@ -5047,8 +5047,8 @@ remove_extra_symbols (std::vector<struct block_symbol> *syms)
|
|||
|
||||
if (remove_p)
|
||||
syms->erase (syms->begin () + i);
|
||||
|
||||
i += 1;
|
||||
else
|
||||
i += 1;
|
||||
}
|
||||
|
||||
/* If all the remaining symbols are identical enumerals, then
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue