gdb_vecs.h: Avoid self move assign
authorAndrew Burgess <andrew.burgess@embecosm.com>
Fri, 8 Nov 2019 23:39:14 +0000 (23:39 +0000)
committerAndrew Burgess <andrew.burgess@embecosm.com>
Sun, 10 Nov 2019 20:09:59 +0000 (20:09 +0000)
commitcf57ad6d61771f608079f31db10a93872a4553c5
treee9d235b3444128dd55b5586bc5f1efc0d888a2f6
parent0b026263ea17155b57f7763901894be2cbb6c3ff
gdb_vecs.h: Avoid self move assign

While working on another patch I ran into an issue with
unordered_remove (in gdb_vecs.h), where removing the last item of the
vector can cause a self move assign.

When compiling the C++ standard library in debug mode (with
-D_GLIBCXX_DEBUG=1) this causes an error to trigger.

I've fixed the issue in this patch and provided a unit test.

The provided unit test includes an assignment operator which checks
for self move assign, this removes the need to compile with
-D_GLIBCXX_DEBUG=1 in order to spot the bug.  If you're keen to see
the error reported from the C++ standard library then remove operator=
from the unit test and recompile GDB with -D_GLIBCXX_DEBUG=1.

gdb/ChangeLog:

* Makefile.in (SUBDIR_UNITTESTS_SRCS): Add new file to the list.
* unittests/vec-utils-selftests.c: New file.
* gdbsupport/gdb_vecs.h (unordered_remove): Avoid self move assign.

Change-Id: I80247b20cd5212038117db7412865f5e6a9257cd
gdb/ChangeLog
gdb/Makefile.in
gdb/gdbsupport/gdb_vecs.h
gdb/unittests/vec-utils-selftests.c [new file with mode: 0644]