diff options
author | Simon Marchi <simon.marchi@polymtl.ca> | 2023-09-29 22:36:23 -0400 |
---|---|---|
committer | Simon Marchi <simon.marchi@efficios.com> | 2023-10-19 10:57:51 -0400 |
commit | c1d21880e981f3f890a74cd9d133e82b26c32818 (patch) | |
tree | 3c6146026e70564e495c5510d288f860ab73ea17 | |
parent | 581b34c2a153d36876ec92bbcd1820ac1d99f83b (diff) | |
download | gdb-c1d21880e981f3f890a74cd9d133e82b26c32818.zip gdb-c1d21880e981f3f890a74cd9d133e82b26c32818.tar.gz gdb-c1d21880e981f3f890a74cd9d133e82b26c32818.tar.bz2 |
gdb: make interps_notify work with references
A subsequent patch changes the interp::on_solib_loaded and
interp::on_solib_unloaded methods to take references. This highlighted
that interps_notify did not work with reference parameters.
Fix that by changing interps_notify's `args` arg to be a universal
reference (&&). Change the type of the method to be auto-deduced as an
additional template parameter, otherwise the signature of the callback
function would never match:
CXX interps.o
/home/simark/src/binutils-gdb/gdb/interps.c: In function ‘void interps_notify_signal_received(gdb_signal)’:
/home/simark/src/binutils-gdb/gdb/interps.c:378:18: error: no matching function for call to ‘interps_notify(void (interp::*)(gdb_signal), gdb_signal&)’
378 | interps_notify (&interp::on_signal_received, sig);
| ~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/simark/src/binutils-gdb/gdb/interps.c:363:1: note: candidate: ‘template<class ... Args> void interps_notify(void (interp::*)(Args ...), Args&& ...)’
363 | interps_notify (void (interp::*method) (Args...), Args&&... args)
| ^~~~~~~~~~~~~~
/home/simark/src/binutils-gdb/gdb/interps.c:363:1: note: template argument deduction/substitution failed:
/home/simark/src/binutils-gdb/gdb/interps.c:378:18: note: inconsistent parameter pack deduction with ‘gdb_signal’ and ‘gdb_signal&’
378 | interps_notify (&interp::on_signal_received, sig);
| ~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Change-Id: I0cd9378e24ef039f30f8e14f054f8d7fb539c838
Approved-By: Pedro Alves <pedro@palves.net>
Reviewed-By: Reviewed-By: Lancelot Six <lancelot.six@amd.com>
-rw-r--r-- | gdb/interps.c | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/gdb/interps.c b/gdb/interps.c index f91b2b6..d7d8730 100644 --- a/gdb/interps.c +++ b/gdb/interps.c @@ -358,15 +358,15 @@ current_interpreter (void) /* Helper interps_notify_* functions. Call METHOD on the top-level interpreter of all UIs. */ -template <typename ...Args> +template <typename MethodType, typename ...Args> void -interps_notify (void (interp::*method) (Args...), Args... args) +interps_notify (MethodType method, Args&&... args) { SWITCH_THRU_ALL_UIS () { interp *tli = top_level_interpreter (); if (tli != nullptr) - (tli->*method) (args...); + (tli->*method) (std::forward<Args> (args)...); } } |