* ada-lang.c (ada_evaluate_subexp) [OP_VAR_VALUE]: For tagged

types, if we are unable to determine the actual symbol type
        from its tag, then use the static approximation instead.
This commit is contained in:
Joel Brobecker 2009-03-13 00:57:52 +00:00
parent ef6f706809
commit b79819baf7
2 changed files with 18 additions and 1 deletions

View file

@ -1,3 +1,9 @@
2009-03-12 Joel Brobecker <brobecker@adacore.com>
* ada-lang.c (ada_evaluate_subexp) [OP_VAR_VALUE]: For tagged
types, if we are unable to determine the actual symbol type
from its tag, then use the static approximation instead.
2009-03-12 Joel Brobecker <brobecker@adacore.com> 2009-03-12 Joel Brobecker <brobecker@adacore.com>
Fix crash printing packed record with packed array. Fix crash printing packed record with packed array.

View file

@ -8576,8 +8576,19 @@ ada_evaluate_subexp (struct type *expect_type, struct expression *exp,
a fixed type would result in the loss of that type name, a fixed type would result in the loss of that type name,
thus preventing us from printing the name of the ancestor thus preventing us from printing the name of the ancestor
type in the type description. */ type in the type description. */
struct type *actual_type;
arg1 = evaluate_subexp (NULL_TYPE, exp, pos, EVAL_NORMAL); arg1 = evaluate_subexp (NULL_TYPE, exp, pos, EVAL_NORMAL);
return value_zero (type_from_tag (ada_value_tag (arg1)), not_lval); actual_type = type_from_tag (ada_value_tag (arg1));
if (actual_type == NULL)
/* If, for some reason, we were unable to determine
the actual type from the tag, then use the static
approximation that we just computed as a fallback.
This can happen if the debugging information is
incomplete, for instance. */
actual_type = type;
return value_zero (actual_type, not_lval);
} }
*pos += 4; *pos += 4;