diff --git a/gdb/ChangeLog b/gdb/ChangeLog index cc9c0af39ac..8ae0ed28b07 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,8 @@ +2004-03-09 Daniel Jacobowitz + + * arm-tdep.c (arm_use_struct_convention): Look through typedefs. + * gdbtypes.c (check_typedef): Update comments. + 2004-03-09 Daniel Jacobowitz * dwarf2read.c (struct comp_unit_head): Remove dwarf2_abbrevs array. diff --git a/gdb/arm-tdep.c b/gdb/arm-tdep.c index 05c0f23d035..bf54a318d19 100644 --- a/gdb/arm-tdep.c +++ b/gdb/arm-tdep.c @@ -2173,6 +2173,8 @@ arm_use_struct_convention (int gcc_p, struct type *type) int nRc; enum type_code code; + CHECK_TYPEDEF (type); + /* In the ARM ABI, "integer" like aggregate types are returned in registers. For an aggregate type to be integer like, its size must be less than or equal to DEPRECATED_REGISTER_SIZE and the @@ -2230,7 +2232,7 @@ arm_use_struct_convention (int gcc_p, struct type *type) for (i = 0; i < TYPE_NFIELDS (type); i++) { enum type_code field_type_code; - field_type_code = TYPE_CODE (TYPE_FIELD_TYPE (type, i)); + field_type_code = TYPE_CODE (check_typedef (TYPE_FIELD_TYPE (type, i))); /* Is it a floating point type field? */ if (field_type_code == TYPE_CODE_FLT) diff --git a/gdb/gdbtypes.c b/gdb/gdbtypes.c index 2dc3a46e07b..1349ffbbe19 100644 --- a/gdb/gdbtypes.c +++ b/gdb/gdbtypes.c @@ -1343,6 +1343,12 @@ get_destructor_fn_field (struct type *t, int *method_indexp, int *field_indexp) return 0; } +static void +stub_noname_complaint (void) +{ + complaint (&symfile_complaints, "stub type has NULL name"); +} + /* Added by Bryan Boreham, Kewill, Sun Sep 17 18:07:17 1989. If this is a stubbed struct (i.e. declared as struct foo *), see if @@ -1356,11 +1362,10 @@ get_destructor_fn_field (struct type *t, int *method_indexp, int *field_indexp) This used to be coded as a macro, but I don't think it is called often enough to merit such treatment. */ -static void -stub_noname_complaint (void) -{ - complaint (&symfile_complaints, "stub type has NULL name"); -} +/* Find the real type of TYPE. This function returns the real type, after + removing all layers of typedefs and completing opaque or stub types. + Completion changes the TYPE argument, but stripping of typedefs does + not. */ struct type * check_typedef (struct type *type)