Fix thinko on dtrace-probe.c:dtrace_process_dof_probe

While investigating PR gdb/22557 ("Regression:
gdb.base/dtrace-probe.exp"), I noticed that the code is wrongly
declaring a new "expression_up" variable inside the TRY block in
"dtrace_process_dof_probe".  This causes the outter "expr" variable to
be empty, which may have an impact later when evaluating the
expression.

This commit fixes that.  Unfortunately the script used to test DTrace
probes (gdb/testsuite/lib/pdtrace.in) is not very reliable so I cannot
say whether this commit fixes the PR mentioned above.  Nonetheless,
it's an obvious fix and should go in.

gdb/ChangeLog:
2017-12-08  Sergio Durigan Junior  <sergiodj@redhat.com>

	* dtrace-probe.c (dtrace_process_dof_probe): Do not declare a new
	"expression_up" inside the TRY block.
This commit is contained in:
Sergio Durigan Junior 2017-12-08 15:33:55 -05:00
parent f17d947477
commit 92469284a6
2 changed files with 9 additions and 5 deletions

View File

@ -1,3 +1,8 @@
2017-12-08 Sergio Durigan Junior <sergiodj@redhat.com>
* dtrace-probe.c (dtrace_process_dof_probe): Do not declare a new
"expression_up" inside the TRY block.
2017-12-08 Yao Qi <yao.qi@linaro.org>
* breakpoint.c (update_watchpoint): Call

View File

@ -486,17 +486,16 @@ dtrace_process_dof_probe (struct objfile *objfile,
TRY
{
expression_up expr
= parse_expression_with_language (type_str.c_str (),
language_c);
expr = parse_expression_with_language (type_str.c_str (),
language_c);
}
CATCH (ex, RETURN_MASK_ERROR)
{
}
END_CATCH
if (expr != NULL && expr->elts[0].opcode == OP_TYPE)
type = expr->elts[1].type;
if (expr != NULL && expr.get ()->elts[0].opcode == OP_TYPE)
type = expr.get ()->elts[1].type;
args.emplace_back (type, std::move (type_str), std::move (expr));
}