[3/5] Fix regression in Ada ptype

Message ID 20210310175612.1759272-4-tromey@adacore.com
State New
Headers show
  • Fix Ada expression regressions
Related show

Commit Message

Tom Tromey March 10, 2021, 5:56 p.m.
This fixes PR ada/27545, which points out that a test in
gdb.ada/tagged.exp started failing due to the expression rewrite.  I
didn't notice this failure because my system gcc-gnat debuginfo was
out of date, and so the test was already failing in the baseline.

Previously, the OP_VAR_VALUE case in ada_evaluate_subexp ended up
doing a recursive call:

    arg1 = evaluate_subexp (nullptr, exp, pos, EVAL_NORMAL);

However, during the rewrite I missed this fact and had the new code
call the superclass implementation.

This patch fixes the bug by changing this code to use a recursive call

2021-03-10  Tom Tromey  <tromey@adacore.com>

	PR ada/27545:
	* ada-lang.c (ada_var_value_operation::evaluate): Use recursive
	call for tagged type.
 gdb/ChangeLog  | 6 ++++++
 gdb/ada-lang.c | 3 +--
 2 files changed, 7 insertions(+), 2 deletions(-)



diff --git a/gdb/ada-lang.c b/gdb/ada-lang.c
index 7e53ae07c18..38f4ec0452b 100644
--- a/gdb/ada-lang.c
+++ b/gdb/ada-lang.c
@@ -10320,8 +10320,7 @@  ada_var_value_operation::evaluate (struct type *expect_type,
 	     a fixed type would result in the loss of that type name,
 	     thus preventing us from printing the name of the ancestor
 	     type in the type description.  */
-	  value *arg1 = var_value_operation::evaluate (nullptr, exp,
-						       EVAL_NORMAL);
+	  value *arg1 = evaluate (nullptr, exp, EVAL_NORMAL);
 	  if (type->code () != TYPE_CODE_REF)