aboutsummaryrefslogtreecommitdiff
path: root/gdb/ada-lang.c
diff options
context:
space:
mode:
authorTom Tromey <tromey@adacore.com>2020-06-16 11:28:23 -0600
committerTom Tromey <tromey@adacore.com>2020-09-09 12:48:27 -0600
commit1b788fb6e9860c2e3aa0f9bbcedcd5feded1aa6e (patch)
tree02f974ac5df380b36cc066ec5754f7dbee2d643d /gdb/ada-lang.c
parent10556cdc8e4340b0dcc2594aec044ba7b6da4aff (diff)
downloadgdb-1b788fb6e9860c2e3aa0f9bbcedcd5feded1aa6e.zip
gdb-1b788fb6e9860c2e3aa0f9bbcedcd5feded1aa6e.tar.gz
gdb-1b788fb6e9860c2e3aa0f9bbcedcd5feded1aa6e.tar.bz2
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
Diffstat (limited to 'gdb/ada-lang.c')
-rw-r--r--gdb/ada-lang.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/gdb/ada-lang.c b/gdb/ada-lang.c
index e405cd2..f13866e 100644
--- a/gdb/ada-lang.c
+++ b/gdb/ada-lang.c
@@ -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