diff options
author | Tom Tromey <tromey@adacore.com> | 2020-04-20 11:45:06 -0600 |
---|---|---|
committer | Tom Tromey <tromey@adacore.com> | 2020-04-20 11:45:06 -0600 |
commit | 0fa7617d84da8b809b14e1e2ee67474526c62021 (patch) | |
tree | c0df8e58cdc7411ed31337b87830614c9223b6a9 /gdb | |
parent | 9b2c992cfa4e9911d3b54c21ced179aa4928c422 (diff) | |
download | gdb-0fa7617d84da8b809b14e1e2ee67474526c62021.zip gdb-0fa7617d84da8b809b14e1e2ee67474526c62021.tar.gz gdb-0fa7617d84da8b809b14e1e2ee67474526c62021.tar.bz2 |
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.
Diffstat (limited to 'gdb')
-rw-r--r-- | gdb/ChangeLog | 11 | ||||
-rw-r--r-- | gdb/completer.c | 10 | ||||
-rw-r--r-- | gdb/completer.h | 2 | ||||
-rw-r--r-- | gdb/python/py-tui.c | 2 | ||||
-rw-r--r-- | gdb/python/python.c | 2 |
5 files changed, 17 insertions, 10 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index b023bfe..aa99da0 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -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. diff --git a/gdb/completer.c b/gdb/completer.c index 0dd91a7..f9631f4 100644 --- a/gdb/completer.c +++ b/gdb/completer.c @@ -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; } diff --git a/gdb/completer.h b/gdb/completer.h index fd0d47b..d3afa5f 100644 --- a/gdb/completer.h +++ b/gdb/completer.h @@ -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 (); diff --git a/gdb/python/py-tui.c b/gdb/python/py-tui.c index de7c396..ca88f85 100644 --- a/gdb/python/py-tui.c +++ b/gdb/python/py-tui.c @@ -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)) { } diff --git a/gdb/python/python.c b/gdb/python/python.c index d65cca4..4875ffd2 100644 --- a/gdb/python/python.c +++ b/gdb/python/python.c @@ -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; |