[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