diff options
author | Joel Brobecker <brobecker@gnat.com> | 2008-01-04 19:01:30 +0000 |
---|---|---|
committer | Joel Brobecker <brobecker@gnat.com> | 2008-01-04 19:01:30 +0000 |
commit | 6799def48172fb4c23cd55e67faa0c9fc3b74dfb (patch) | |
tree | 33cf9740b23d4a79ac6aaa59515244f6e936a32b | |
parent | 23117009d46b41090113fdbb422ea2d0effbf538 (diff) | |
download | gdb-6799def48172fb4c23cd55e67faa0c9fc3b74dfb.zip gdb-6799def48172fb4c23cd55e67faa0c9fc3b74dfb.tar.gz gdb-6799def48172fb4c23cd55e67faa0c9fc3b74dfb.tar.bz2 |
* ada-lang.c (ada_evaluate_subexp): Evaluate tagged types in
EVAL_NORMAL mode when noside is EVAL_AVOID_SIDE_EFFECTS.
-rw-r--r-- | gdb/ChangeLog | 5 | ||||
-rw-r--r-- | gdb/ada-lang.c | 9 |
2 files changed, 14 insertions, 0 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 6c6be45..82f6ae8 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,10 @@ 2008-01-04 Joel Brobecker <brobecker@adacore.com> + * ada-lang.c (ada_evaluate_subexp): Evaluate tagged types in + EVAL_NORMAL mode when noside is EVAL_AVOID_SIDE_EFFECTS. + +2008-01-04 Joel Brobecker <brobecker@adacore.com> + * ada-exp.y (chop_separator): New function. (write_selectors): Rewrite to re-use chop_separator. (ada_nget_field_index, get_symbol_field_type): New functions. diff --git a/gdb/ada-lang.c b/gdb/ada-lang.c index 2c61705..134244f 100644 --- a/gdb/ada-lang.c +++ b/gdb/ada-lang.c @@ -8339,6 +8339,15 @@ ada_evaluate_subexp (struct type *expect_type, struct expression *exp, case OP_VAR_VALUE: *pos -= 1; + + /* Tagged types are a little special in the fact that the real type + is dynamic and can only be determined by inspecting the object + value. So even if we're support to do an EVAL_AVOID_SIDE_EFFECTS + evaluation, we force an EVAL_NORMAL evaluation for tagged types. */ + if (noside == EVAL_AVOID_SIDE_EFFECTS + && ada_is_tagged_type (SYMBOL_TYPE (exp->elts[pc + 2].symbol), 1)) + noside = EVAL_NORMAL; + if (noside == EVAL_SKIP) { *pos += 4; |