[PATCH 2/6] Avoid redundant operations in `fortran_array_walker'
Maciej W. Rozycki
macro@embecosm.com
Sat Dec 11 11:47:14 GMT 2021
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.
---
gdb/f-array-walker.h | 7 ++++---
1 file changed, 4 insertions(+), 3 deletions(-)
gdb-fortran-array-walker-walk-type.diff
Index: src/gdb/f-array-walker.h
===================================================================
--- src.orig/gdb/f-array-walker.h
+++ src/gdb/f-array-walker.h
@@ -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;
More information about the Gdb-patches
mailing list