While reviewing this patch:
https://sourceware.org/pipermail/gdb-patches/2021-November/183227.html
I spotted that the patch could be improved if we threw
OPTIMIZED_OUT_ERROR rather than GENERIC_ERROR in a few places.
This commit updates error_value_optimized_out and
require_not_optimized_out to throw OPTIMIZED_OUT_ERROR.
I ran the testsuite and saw no regressions. This doesn't really
surprise me, we don't usually write code like:
catch (const gdb_exception_error &ex)
{
(if ex.error == GENERIC_ERROR)
...
else
...
}
There are a three places where we write something like:
catch (const gdb_exception_error &ex)
{
(if ex.error == OPTIMIZED_OUT_ERROR)
...
}
In frame.c:unwind_pc, stack.c:info_frame_command_core, and
value.c:value_optimized_out, but if we are hitting these cases then
it's not significantly changing GDB's behaviour.
void
error_value_optimized_out (void)
{
- error (_("value has been optimized out"));
+ throw_error (OPTIMIZED_OUT_ERROR, _("value has been optimized out"));
}
static void
if (!value->optimized_out.empty ())
{
if (value->lval == lval_register)
- error (_("register has not been saved in frame"));
+ throw_error (OPTIMIZED_OUT_ERROR,
+ _("register has not been saved in frame"));
else
error_value_optimized_out ();
}