aboutsummaryrefslogtreecommitdiff
path: root/gdb
diff options
context:
space:
mode:
authorTom Tromey <tromey@adacore.com>2020-04-20 11:45:06 -0600
committerTom Tromey <tromey@adacore.com>2020-04-20 11:45:06 -0600
commit0fa7617d84da8b809b14e1e2ee67474526c62021 (patch)
treec0df8e58cdc7411ed31337b87830614c9223b6a9 /gdb
parent9b2c992cfa4e9911d3b54c21ced179aa4928c422 (diff)
downloadgdb-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/ChangeLog11
-rw-r--r--gdb/completer.c10
-rw-r--r--gdb/completer.h2
-rw-r--r--gdb/python/py-tui.c2
-rw-r--r--gdb/python/python.c2
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;