/* Rethrow using the normal EH mechanism. */
if (gdb_expt.reason < 0)
- throw_exception (gdb_expt);
+ throw_exception (std::move (gdb_expt));
}
/* GDB's readline callback handler. Calls the current INPUT_HANDLER,
static void
gdb_rl_callback_handler (char *rl) noexcept
{
- struct gdb_exception gdb_rl_expt;
+ /* This is static to avoid undefined behavior when calling longjmp
+ -- gdb_exception has a destructor with side effects. */
+ static struct gdb_exception gdb_rl_expt;
struct ui *ui = current_ui;
try
{
+ /* Ensure the exception is reset on each call. */
+ gdb_rl_expt = {};
ui->input_handler (gdb::unique_xmalloc_ptr<char> (rl));
}
catch (gdb_exception &ex)