mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-11-27 12:03:41 +08:00
* valops.c (value_ind): No longer allow dereferencing an
integer type. * eval.c (evaluate_subexp_standard): Handle deferencing an integer type here. * ada-lang.c (ada_evaluate_subexp): Likewise.
This commit is contained in:
parent
d8631d213f
commit
22fe0fbb30
@ -1,3 +1,11 @@
|
||||
2008-09-11 Ulrich Weigand <uweigand@de.ibm.com>
|
||||
|
||||
* valops.c (value_ind): No longer allow dereferencing an
|
||||
integer type.
|
||||
* eval.c (evaluate_subexp_standard): Handle deferencing an
|
||||
integer type here.
|
||||
* ada-lang.c (ada_evaluate_subexp): Likewise.
|
||||
|
||||
2008-09-11 Ulrich Weigand <uweigand@de.ibm.com>
|
||||
|
||||
* ada-valprint.c (ada_val_print_1): When implicitly dereferencing
|
||||
|
@ -9155,7 +9155,8 @@ ada_evaluate_subexp (struct type *expect_type, struct expression *exp,
|
||||
}
|
||||
else if (TYPE_CODE (type) == TYPE_CODE_INT)
|
||||
/* GDB allows dereferencing an int. */
|
||||
return value_zero (builtin_type_int, lval_memory);
|
||||
return value_zero (builtin_type (exp->gdbarch)->builtin_int,
|
||||
lval_memory);
|
||||
else
|
||||
error (_("Attempt to take contents of a non-pointer value."));
|
||||
}
|
||||
@ -9165,6 +9166,10 @@ ada_evaluate_subexp (struct type *expect_type, struct expression *exp,
|
||||
if (ada_is_array_descriptor_type (type))
|
||||
/* GDB allows dereferencing GNAT array descriptors. */
|
||||
return ada_coerce_to_simple_array (arg1);
|
||||
else if (TYPE_CODE (type) == TYPE_CODE_INT)
|
||||
/* GDB allows dereferencing an int. */
|
||||
return value_at_lazy (builtin_type (exp->gdbarch)->builtin_int,
|
||||
(CORE_ADDR) value_as_address (arg1));
|
||||
else
|
||||
return ada_value_ind (arg1);
|
||||
|
||||
|
11
gdb/eval.c
11
gdb/eval.c
@ -2288,10 +2288,19 @@ evaluate_subexp_standard (struct type *expect_type,
|
||||
lval_memory);
|
||||
else if (TYPE_CODE (type) == TYPE_CODE_INT)
|
||||
/* GDB allows dereferencing an int. */
|
||||
return value_zero (builtin_type_int, lval_memory);
|
||||
return value_zero (builtin_type (exp->gdbarch)->builtin_int,
|
||||
lval_memory);
|
||||
else
|
||||
error (_("Attempt to take contents of a non-pointer value."));
|
||||
}
|
||||
|
||||
/* Allow * on an integer so we can cast it to whatever we want.
|
||||
This returns an int, which seems like the most C-like thing to
|
||||
do. "long long" variables are rare enough that
|
||||
BUILTIN_TYPE_LONGEST would seem to be a mistake. */
|
||||
if (TYPE_CODE (type) == TYPE_CODE_INT)
|
||||
return value_at_lazy (builtin_type (exp->gdbarch)->builtin_int,
|
||||
(CORE_ADDR) value_as_address (arg1));
|
||||
return value_ind (arg1);
|
||||
|
||||
case UNOP_ADDR:
|
||||
|
@ -1172,14 +1172,7 @@ value_ind (struct value *arg1)
|
||||
|
||||
base_type = check_typedef (value_type (arg1));
|
||||
|
||||
/* Allow * on an integer so we can cast it to whatever we want.
|
||||
This returns an int, which seems like the most C-like thing to
|
||||
do. "long long" variables are rare enough that
|
||||
BUILTIN_TYPE_LONGEST would seem to be a mistake. */
|
||||
if (TYPE_CODE (base_type) == TYPE_CODE_INT)
|
||||
return value_at_lazy (builtin_type_int,
|
||||
(CORE_ADDR) value_as_address (arg1));
|
||||
else if (TYPE_CODE (base_type) == TYPE_CODE_PTR)
|
||||
if (TYPE_CODE (base_type) == TYPE_CODE_PTR)
|
||||
{
|
||||
struct type *enc_type;
|
||||
/* We may be pointing to something embedded in a larger object.
|
||||
|
Loading…
Reference in New Issue
Block a user