Avoid redundant operations in `fortran_array_walker'

Move inner dimension's element type determination outside the respective
loops in `fortran_array_walker'.  The operation is exactly the same with
each iteration, so there is no point in redoing it for each element and
while a smart compiler might be able to move it outside the loop it is
regardless a bad coding style.  No functional change.
This commit is contained in:
Maciej W. Rozycki 2021-12-17 15:01:32 +00:00
parent c12d6b570d
commit 8294c9025a

View File

@ -208,6 +208,8 @@ class fortran_array_walker
if (nss != m_ndimensions)
{
struct type *subarray_type = TYPE_TARGET_TYPE (check_typedef (type));
/* For dimensions other than the inner most, walk each element and
recurse while peeling off one more dimension of the array. */
for (LONGEST i = lowerbound;
@ -218,13 +220,13 @@ class fortran_array_walker
LONGEST new_offset = offset + calc.index_offset (i);
/* Now print the lower dimension. */
struct type *subarray_type
= TYPE_TARGET_TYPE (check_typedef (type));
walk_1 (nss + 1, subarray_type, new_offset, (i == upperbound));
}
}
else
{
struct type *elt_type = check_typedef (TYPE_TARGET_TYPE (type));
/* For the inner most dimension of the array, process each element
within this dimension. */
for (LONGEST i = lowerbound;
@ -233,7 +235,6 @@ class fortran_array_walker
{
LONGEST elt_off = offset + calc.index_offset (i);
struct type *elt_type = check_typedef (TYPE_TARGET_TYPE (type));
if (is_dynamic_type (elt_type))
{
CORE_ADDR e_address = m_address + elt_off;