aboutsummaryrefslogtreecommitdiff
path: root/gdb
diff options
context:
space:
mode:
authorTom Tromey <tromey@adacore.com>2021-03-15 06:23:12 -0600
committerTom Tromey <tromey@adacore.com>2021-03-15 06:23:13 -0600
commit9863c3b5fc64eec400ed55792a49c678927a6145 (patch)
tree9d97ec4c7dac8cc8960d66e6ddbac89f15e4cc94 /gdb
parent1ac7452264fee536b0f62610e8dbe9f9e253a6f8 (diff)
downloadbinutils-9863c3b5fc64eec400ed55792a49c678927a6145.zip
binutils-9863c3b5fc64eec400ed55792a49c678927a6145.tar.gz
binutils-9863c3b5fc64eec400ed55792a49c678927a6145.tar.bz2
Fix regression in Ada ptype
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 instead. gdb/ChangeLog 2021-03-15 Tom Tromey <tromey@adacore.com> PR ada/27545: * ada-lang.c (ada_var_value_operation::evaluate): Use recursive call for tagged type.
Diffstat (limited to 'gdb')
-rw-r--r--gdb/ChangeLog6
-rw-r--r--gdb/ada-lang.c3
2 files changed, 7 insertions, 2 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index ed4da7a..3033d11 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,5 +1,11 @@
2021-03-15 Tom Tromey <tromey@adacore.com>
+ PR ada/27545:
+ * ada-lang.c (ada_var_value_operation::evaluate): Use recursive
+ call for tagged type.
+
+2021-03-15 Tom Tromey <tromey@adacore.com>
+
* ada-exp.y (exp1): Handle resolution of the right hand side of an
assignment.
diff --git a/gdb/ada-lang.c b/gdb/ada-lang.c
index ea43a25..07958e7 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)
{