+2019-04-25 Tom Tromey <tromey@adacore.com>
+
+ * event-top.c (gdb_rl_callback_read_char_wrapper_noexcept)
+ (gdb_rl_callback_handler): Use std::move.
+ * common/common-exceptions.h (struct gdb_exception): Add move
+ assignment operator.
+ (throw_exception_sjlj): Change "exception" to const reference.
+ * common/common-exceptions.c (exceptions_state_mc_catch): Update.
+ (throw_exception_sjlj): Change "exception" to const reference.
+
2019-04-25 Tom Tromey <tromey@adacore.com>
* xml-support.c (gdb_xml_parser::gdb_xml_parser): Update.
/* Return EXCEPTION to the nearest containing CATCH_SJLJ block. */
void
-throw_exception_sjlj (struct gdb_exception exception)
+throw_exception_sjlj (const struct gdb_exception &exception)
{
/* Jump to the nearest CATCH_SJLJ block, communicating REASON to
that call via setjmp's return value. Note that REASON can't be
zero, by definition in common-exceptions.h. */
exceptions_state_mc (CATCH_THROWING);
+ enum return_reason reason = exception.reason;
catchers.front ().exception = exception;
- longjmp (catchers.front ().buf, exception.reason);
+ longjmp (catchers.front ().buf, reason);
}
/* Implementation of throw_exception that uses C++ try/catch. */
return *this;
}
+ gdb_exception &operator= (gdb_exception &&other) noexcept = default;
+
/* Return the contents of the exception message, as a C string. The
string remains owned by the exception object. */
const char *what () const noexcept
containing exception handler established using TRY_SJLJ. Necessary
in some cases where we need to throw GDB exceptions across
third-party library code (e.g., readline). */
-extern void throw_exception_sjlj (struct gdb_exception exception)
+extern void throw_exception_sjlj (const struct gdb_exception &exception)
ATTRIBUTE_NORETURN;
/* Convenience wrappers around throw_exception that throw GDB
}
CATCH_SJLJ (ex, RETURN_MASK_ALL)
{
- gdb_expt = ex;
+ gdb_expt = std::move (ex);
}
END_CATCH_SJLJ
{
ui->input_handler (gdb::unique_xmalloc_ptr<char> (rl));
}
- catch (const gdb_exception &ex)
+ catch (gdb_exception &ex)
{
- gdb_rl_expt = ex;
+ gdb_rl_expt = std::move (ex);
}
/* If we caught a GDB exception, longjmp out of the readline