From: Markus Deuling Date: Tue, 22 Apr 2008 06:53:18 +0000 (+0000) Subject: * eval.c (evaluate_subexp_standard): Use value_subscripted_rvalue for X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=9eec4d1e39028b54f54638c90b2c628b958162fe;p=binutils-gdb.git * eval.c (evaluate_subexp_standard): Use value_subscripted_rvalue for multi_f77_subscript to support values from registers. * valarith.c (value_subscripted_rvalue): Remove prototype and static. * value.h (value_subscripted_rvalue): Add prototype. * f-typeprint.c (f_type_print_base): Add support for TYPE_CODE_UNION. Fix output. * f-valprint.c (f_val_print): Likewise. --- diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 976fea1de24..db29ac891ae 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,14 @@ +2008-04-22 Markus Deuling + + * eval.c (evaluate_subexp_standard): Use value_subscripted_rvalue for + multi_f77_subscript to support values from registers. + * valarith.c (value_subscripted_rvalue): Remove prototype and static. + * value.h (value_subscripted_rvalue): Add prototype. + + * f-typeprint.c (f_type_print_base): Add support for TYPE_CODE_UNION. + Fix output. + * f-valprint.c (f_val_print): Likewise. + 2008-04-21 Craig Silverstein * dwarf2read.c (zlib_decompress_section): Define abfd in the diff --git a/gdb/eval.c b/gdb/eval.c index 79defebe84e..8a0cd87d93f 100644 --- a/gdb/eval.c +++ b/gdb/eval.c @@ -1720,7 +1720,7 @@ evaluate_subexp_standard (struct type *expect_type, returns the correct type value */ deprecated_set_value_type (arg1, tmp_type); - return value_ind (value_add (value_coerce_array (arg1), arg2)); + return value_subscripted_rvalue (arg1, arg2, 0); } case BINOP_LOGICAL_AND: diff --git a/gdb/f-typeprint.c b/gdb/f-typeprint.c index d55c1657c9c..ad93152273d 100644 --- a/gdb/f-typeprint.c +++ b/gdb/f-typeprint.c @@ -368,14 +368,22 @@ f_type_print_base (struct type *type, struct ui_file *stream, int show, break; case TYPE_CODE_STRUCT: - fprintfi_filtered (level, stream, "Type "); + case TYPE_CODE_UNION: + if (TYPE_CODE (type) == TYPE_CODE_UNION) + fprintfi_filtered (level, stream, "Type, C_Union :: "); + else + fprintfi_filtered (level, stream, "Type "); fputs_filtered (TYPE_TAG_NAME (type), stream); fputs_filtered ("\n", stream); for (index = 0; index < TYPE_NFIELDS (type); index++) { - f_print_type (TYPE_FIELD_TYPE (type, index), "", stream, show, level + 4); + f_type_print_base (TYPE_FIELD_TYPE (type, index), stream, show, + level + 4); fputs_filtered (" :: ", stream); - fputs_filtered (TYPE_FIELD_NAME (type, index), stream); + fprintfi_filtered (level, stream, "%s", + TYPE_FIELD_NAME (type, index)); + f_type_print_varspec_suffix (TYPE_FIELD_TYPE (type, index), + stream, 0, 0, 0); fputs_filtered ("\n", stream); } fprintfi_filtered (level, stream, "End Type "); diff --git a/gdb/f-valprint.c b/gdb/f-valprint.c index b2e327189b5..70ad59f9bf2 100644 --- a/gdb/f-valprint.c +++ b/gdb/f-valprint.c @@ -589,9 +589,10 @@ f_val_print (struct type *type, const gdb_byte *valaddr, int embedded_offset, break; case TYPE_CODE_STRUCT: + case TYPE_CODE_UNION: /* Starting from the Fortran 90 standard, Fortran supports derived types. */ - fprintf_filtered (stream, "{ "); + fprintf_filtered (stream, "( "); for (index = 0; index < TYPE_NFIELDS (type); index++) { int offset = TYPE_FIELD_BITPOS (type, index) / 8; @@ -601,7 +602,7 @@ f_val_print (struct type *type, const gdb_byte *valaddr, int embedded_offset, if (index != TYPE_NFIELDS (type) - 1) fputs_filtered (", ", stream); } - fprintf_filtered (stream, "}"); + fprintf_filtered (stream, " )"); break; default: diff --git a/gdb/valarith.c b/gdb/valarith.c index 7d6f35b2fbf..7e6b66e000f 100644 --- a/gdb/valarith.c +++ b/gdb/valarith.c @@ -39,7 +39,6 @@ #define TRUNCATION_TOWARDS_ZERO ((-5 / 2) == -2) #endif -static struct value *value_subscripted_rvalue (struct value *, struct value *, int); static struct type *unop_result_type (enum exp_opcode op, struct type *type1); static struct type *binop_result_type (enum exp_opcode op, struct type *type1, struct type *type2); @@ -257,7 +256,7 @@ value_subscript (struct value *array, struct value *idx) (eg, a vector register). This routine used to promote floats to doubles, but no longer does. */ -static struct value * +struct value * value_subscripted_rvalue (struct value *array, struct value *idx, int lowerbound) { struct type *array_type = check_typedef (value_type (array)); diff --git a/gdb/value.h b/gdb/value.h index 5f8fe58c0ad..55eb253a5ab 100644 --- a/gdb/value.h +++ b/gdb/value.h @@ -558,4 +558,5 @@ extern struct value *value_allocate_space_in_inferior (int); extern struct value *value_of_local (const char *name, int complain); +extern struct value * value_subscripted_rvalue (struct value *array, struct value *idx, int lowerbound); #endif /* !defined (VALUE_H) */