* ada-lang.c (ada_evaluate_subexp) [OP_ATR_SIZE]: Add handling

of arguments that are references.
This commit is contained in:
Joel Brobecker 2008-10-07 14:07:10 +00:00
parent b9eb56c1fd
commit 8c1c099fc4
2 changed files with 14 additions and 2 deletions

View File

@ -1,3 +1,8 @@
2008-10-07 Joel Brobecker <brobecker@adacore.com>
* ada-lang.c (ada_evaluate_subexp) [OP_ATR_SIZE]: Add handling
of arguments that are references.
2008-10-06 Doug Evans <dje@google.com>
* dwarf2read.c (dwarf2_die_debug): New static global.

View File

@ -9056,14 +9056,21 @@ ada_evaluate_subexp (struct type *expect_type, struct expression *exp,
case OP_ATR_SIZE:
arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
type = value_type (arg1);
/* If the argument is a reference, then dereference its type, since
the user is really asking for the size of the actual object,
not the size of the pointer. */
if (TYPE_CODE (type) == TYPE_CODE_REF)
type = TYPE_TARGET_TYPE (type);
if (noside == EVAL_SKIP)
goto nosideret;
else if (noside == EVAL_AVOID_SIDE_EFFECTS)
return value_zero (builtin_type_int32, not_lval);
else
return value_from_longest (builtin_type_int32,
TARGET_CHAR_BIT
* TYPE_LENGTH (value_type (arg1)));
TARGET_CHAR_BIT * TYPE_LENGTH (type));
case OP_ATR_VAL:
evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);