[PATCH] Debug support for Fortran 90 assumed shape and other descriptor using arrays (PR fortran/22244)
Jakub Jelinek
jakub@redhat.com
Fri Nov 16 16:14:00 GMT 2007
On Fri, Nov 16, 2007 at 02:06:42PM +0100, Tobias Burnus wrote:
> Jakub Jelinek wrote:
> > Can you look at with idb on gfortran (vanilla or patched) generated MAIN__
> > x and y arrays after the bar subroutine returns and see if they are
> > displayed in the expected order or not?
> >
> For the a5.f90 test case, compiled with ifort (!) I get:
Ok, can you retry with the following additional patch on top of the previous
one?
It seems ifort emits DW_AT_subrange_type's in the same order as GCC, i.e.
for (1:5, 4:7, 8:9) there is
DW_AT_subrange_type
DW_AT_lower_bound 1
DW_AT_upper_bound 5
DW_AT_subrange_type
DW_AT_lower_bound 4
DW_AT_upper_bound 7
DW_AT_subrange_type
DW_AT_lower_bound 8
DW_AT_upper_bound 9
but GCC doesn't add any DW_AT_ordering, while ifort adds
DW_AT_ordering DW_ORD_col_major.
Wonder what gdb will do in presence of DW_ORD_col_major, I fear that
DW_ORD_col_major means it just reverses the order of DW_AT_subrange_type
notes and has hardcoded another reordering for Fortran or something, Jan?
--- gcc/dwarf2out.c.jj 2007-11-15 20:05:54.000000000 +0100
+++ gcc/dwarf2out.c 2007-11-16 14:16:13.000000000 +0100
@@ -11636,6 +11636,12 @@ gen_array_type_die (tree type, dw_die_re
add_AT_flag (array_die, DW_AT_GNU_vector, 1);
}
+ /* For Fortran multidimensional arrays use DW_ORD_col_major ordering. */
+ if (is_fortran ()
+ && TREE_CODE (type) == ARRAY_TYPE
+ && TREE_CODE (TREE_TYPE (type)) == ARRAY_TYPE)
+ add_AT_unsigned (array_die, DW_AT_ordering, DW_ORD_col_major);
+
#if 0
/* We default the array ordering. SDB will probably do
the right things even if DW_AT_ordering is not present. It's not even
@@ -11787,6 +11793,11 @@ gen_descr_array_type_die (tree type, str
add_name_attribute (array_die, type_tag (type));
equate_type_number_to_die (type, array_die);
+ /* For Fortran multidimensional arrays use DW_ORD_col_major ordering. */
+ if (is_fortran ()
+ && info->ndimensions >= 2)
+ add_AT_unsigned (array_die, DW_AT_ordering, DW_ORD_col_major);
+
if (info->data_location)
add_descr_info_field (array_die, DW_AT_data_location, info->data_location,
info->base_decl);
Jakub
More information about the Gcc-patches
mailing list