aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gdb/ChangeLog11
-rw-r--r--gdb/eval.c2
-rw-r--r--gdb/f-typeprint.c14
-rw-r--r--gdb/f-valprint.c5
-rw-r--r--gdb/valarith.c3
-rw-r--r--gdb/value.h1
6 files changed, 28 insertions, 8 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 976fea1..db29ac8 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,14 @@
+2008-04-22 Markus Deuling <deuling@de.ibm.com>
+
+ * 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 <csilvers@google.com>
* dwarf2read.c (zlib_decompress_section): Define abfd in the
diff --git a/gdb/eval.c b/gdb/eval.c
index 79defeb..8a0cd87 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 d55c165..ad93152 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 b2e3271..70ad59f 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 7d6f35b..7e6b66e 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 5f8fe58c0..55eb253 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) */