This is the mail archive of the
gdb-patches@sources.redhat.com
mailing list for the GDB project.
[PATCH] Improvements to Fortran support
- From: David Lecomber <david at streamline-computing dot com>
- To: gdb-patches at sources dot redhat dot com
- Date: Fri, 16 May 2003 12:21:03 +0100
- Subject: [PATCH] Improvements to Fortran support
- References: <20030115213240.A17967@streamline-computing.com>
Reposting as I now have the copyright assignment in place..
Fortran arrays are presently allocated in their entirety and then the
correct element is pulled out. This (a) doesn't scale, (b) doesn't
work if the array is a parameter to a subroutine and supplied with a
(*) in the dimensions (GDB runs out of memory doing malloc( -1 )..)
The fix here makes the behaviour the same as the code for doing C
arrays..
*** eval.c Sun Dec 15 22:29:59 2002
--- eval.c Sun Dec 15 22:28:41 2002
*************** evaluate_subexp_standard (struct type *e
*** 1383,1392 ****
offset_item =
array_size_array[i] * offset_item + subscript_array[i];
- /* Construct a value node with the value of the offset */
-
- arg2 = value_from_longest (builtin_type_f_integer, offset_item);
-
/* Let us now play a dirty trick: we will take arg1
which is a value node pointing to the topmost level
of the multidimensional array-set and pretend
--- 1383,1388 ----
*************** evaluate_subexp_standard (struct type *e
*** 1395,1401 ****
returns the correct type value */
VALUE_TYPE (arg1) = tmp_type;
! return value_ind (value_add (value_coerce_array (arg1), arg2));
}
case BINOP_LOGICAL_AND:
--- 1391,1405 ----
returns the correct type value */
VALUE_TYPE (arg1) = tmp_type;
!
! f77_get_dynamic_lowerbound (tmp_type, &lower);
!
! /* Construct a value node with the value of the offset */
! /* lower will get subtracted off in value_subscript, hence add it here */
!
! arg2 = value_from_longest (builtin_type_f_integer, offset_item + lower);
!
! return value_subscript(arg1, arg2);
}
case BINOP_LOGICAL_AND:
David