Mark move constructors as "noexcept"

I recently learned that move constructors generally should be marked
"noexcept".  This ensures that standard containers will move objects
when possible, rather than copy them.

This patch fixes the cases I could find.  Note that implicitly-defined
or defaulted move constructors will automatically do what you'd
expect; that is, they are noexcept if all the members have noexcept
move constructors.

While doing this, I noticed a couple of odd cases where the move
constructor seemed to assume that the object being constructed could
have state requiring destruction.  I've fixed these as well.  See
completion_result and scoped_mmap.

gdb/ChangeLog
2020-04-20  Tom Tromey  <tromey@adacore.com>

	* python/python.c (struct gdbpy_event): Mark move constructor as
	noexcept.
	* python/py-tui.c (class gdbpy_tui_window_maker): Mark move
	constructor as noexcept.
	* completer.h (struct completion_result): Mark move constructor as
	noexcept.
	* completer.c (completion_result::completion_result): Use
	initialization style.  Don't call reset_match_list.

gdbsupport/ChangeLog
2020-04-20  Tom Tromey  <tromey@adacore.com>

	* scoped_mmap.h (scoped_mmap): Mark move constructor as noexcept.
	Use initialization style.  Don't call destroy.
	* scoped_fd.h (class scoped_fd): Mark move constructor as
	noexcept.
	* gdb_ref_ptr.h (class ref_ptr): Mark move constructor as
	noexcept.
This commit is contained in:
Tom Tromey 2020-04-20 11:45:06 -06:00
parent 9b2c992cfa
commit 0fa7617d84
9 changed files with 31 additions and 18 deletions

View File

@ -1,3 +1,14 @@
2020-04-20 Tom Tromey <tromey@adacore.com>
* python/python.c (struct gdbpy_event): Mark move constructor as
noexcept.
* python/py-tui.c (class gdbpy_tui_window_maker): Mark move
constructor as noexcept.
* completer.h (struct completion_result): Mark move constructor as
noexcept.
* completer.c (completion_result::completion_result): Use
initialization style. Don't call reset_match_list.
2020-04-20 Mihails Strasuns <mihails.strasuns@intel.com>
* MAINTAINERS (Write After Approval): Add myself.

View File

@ -2327,15 +2327,11 @@ completion_result::~completion_result ()
/* See completer.h */
completion_result::completion_result (completion_result &&rhs)
completion_result::completion_result (completion_result &&rhs) noexcept
: match_list (rhs.match_list),
number_matches (rhs.number_matches)
{
if (this == &rhs)
return;
reset_match_list ();
match_list = rhs.match_list;
rhs.match_list = NULL;
number_matches = rhs.number_matches;
rhs.number_matches = 0;
}

View File

@ -242,7 +242,7 @@ struct completion_result
DISABLE_COPY_AND_ASSIGN (completion_result);
/* Move a result. */
completion_result (completion_result &&rhs);
completion_result (completion_result &&rhs) noexcept;
/* Release ownership of the match list array. */
char **release_match_list ();

View File

@ -233,7 +233,7 @@ public:
~gdbpy_tui_window_maker ();
gdbpy_tui_window_maker (gdbpy_tui_window_maker &&other)
gdbpy_tui_window_maker (gdbpy_tui_window_maker &&other) noexcept
: m_constr (std::move (other.m_constr))
{
}

View File

@ -975,7 +975,7 @@ struct gdbpy_event
{
}
gdbpy_event (gdbpy_event &&other)
gdbpy_event (gdbpy_event &&other) noexcept
: m_func (other.m_func)
{
other.m_func = nullptr;

View File

@ -1,3 +1,12 @@
2020-04-20 Tom Tromey <tromey@adacore.com>
* scoped_mmap.h (scoped_mmap): Mark move constructor as noexcept.
Use initialization style. Don't call destroy.
* scoped_fd.h (class scoped_fd): Mark move constructor as
noexcept.
* gdb_ref_ptr.h (class ref_ptr): Mark move constructor as
noexcept.
2020-04-13 Tom Tromey <tom@tromey.com>
* event-loop.c: Move comment. Remove obsolete comment.

View File

@ -78,7 +78,7 @@ class ref_ptr
}
/* Transfer ownership from OTHER. */
ref_ptr (ref_ptr &&other)
ref_ptr (ref_ptr &&other) noexcept
: m_obj (other.m_obj)
{
other.m_obj = NULL;

View File

@ -30,7 +30,7 @@ class scoped_fd
public:
explicit scoped_fd (int fd = -1) noexcept : m_fd (fd) {}
scoped_fd (scoped_fd &&other)
scoped_fd (scoped_fd &&other) noexcept
: m_fd (other.m_fd)
{
other.m_fd = -1;

View File

@ -42,13 +42,10 @@ public:
destroy ();
}
scoped_mmap (scoped_mmap &&rhs)
scoped_mmap (scoped_mmap &&rhs) noexcept
: m_mem (rhs.m_mem),
m_length (rhs.m_length)
{
destroy ();
m_mem = rhs.m_mem;
m_length = rhs.m_length;
rhs.m_mem = MAP_FAILED;
rhs.m_length = 0;
}