mirror of
https://github.com/darlinghq/darling-gdb.git
synced 2024-11-23 20:19:49 +00:00
fort_dyn_array: Support evaluation of dynamic elements inside arrays.
Resolve type of an array's element to be printed in case it is dynamic. Otherwise we don't use the correct boundaries nor the right location. Before: ptype fivearr(1) type = Type five Type one integer(kind=4) :: ivla(34196784:34196832,34197072:34197120,34197360:34197408) End Type one :: tone End Type five After: ptype fivearr(1) type = Type five Type one integer(kind=4) :: ivla(2,4,6) End Type one :: tone End Type five 2016-04-26 Bernhard Heckel <bernhard.heckel@intel.com> gdb/Changelog: * valarith.c (value_address): Resolve dynamic types. gdb/testsuite/Changelog: * gdb.fortran/vla-type.f90: Add test for static and dynamic arrays of dynamic types. * gdb.fortran/vla-type.exp: Add test for static and dynamic arrays of dynamic types.
This commit is contained in:
parent
9920b4348e
commit
8f07e298b1
@ -1,3 +1,7 @@
|
||||
2016-04-26 Bernhard Heckel <bernhard.heckel@intel.com>
|
||||
|
||||
* valarith.c (value_address): Resolve dynamic types.
|
||||
|
||||
2016-04-26 Bernhard Heckel <bernhard.heckel@intel.com>
|
||||
Keven Boell <kevel.boell@intel.com>
|
||||
|
||||
|
@ -1,3 +1,10 @@
|
||||
2016-04-26 Bernhard Heckel <bernhard.heckel@intel.com>
|
||||
|
||||
* gdb.fortran/vla-type.f90: Add test for static and dynamic arrays
|
||||
of dynamic types.
|
||||
* gdb.fortran/vla-type.exp: Add test for static and dynamic arrays
|
||||
of dynamic types.
|
||||
|
||||
2016-04-26 Bernhard Heckel <bernhard.heckel@intel.com>
|
||||
|
||||
* gdb.fortran/vla-type.f90: New file.
|
||||
|
@ -100,3 +100,55 @@ gdb_test "ptype fivev" \
|
||||
"\\s+$int :: ivla\\\(10,10,10\\\)" \
|
||||
"\\s+End Type one :: tone" \
|
||||
"End Type five" ]
|
||||
|
||||
# Check array of types containing a VLA
|
||||
gdb_breakpoint [gdb_get_line_number "fivearr-filled"]
|
||||
gdb_continue_to_breakpoint "fivearr-filled"
|
||||
gdb_test "print fivearr(1)%tone%ivla(1, 2, 3)" " = 1"
|
||||
gdb_test "print fivearr(1)%tone%ivla(2, 2, 10)" "no such vector element"
|
||||
gdb_test "print fivearr(1)%tone%ivla(2, 2, 3)" " = 223"
|
||||
gdb_test "print fivearr(2)%tone%ivla(12, 14, 16)" " = 2"
|
||||
gdb_test "print fivearr(2)%tone%ivla(6, 7, 8)" " = 678"
|
||||
gdb_test "ptype fivearr(1)" \
|
||||
[multi_line "type = Type five" \
|
||||
"\\s+Type one" \
|
||||
"\\s+$int :: ivla\\\(2,4,6\\\)" \
|
||||
"\\s+End Type one :: tone" \
|
||||
"End Type five" ]
|
||||
gdb_test "ptype fivearr(2)" \
|
||||
[multi_line "type = Type five" \
|
||||
"\\s+Type one" \
|
||||
"\\s+$int :: ivla\\\(12,14,16\\\)" \
|
||||
"\\s+End Type one :: tone" \
|
||||
"End Type five" ]
|
||||
|
||||
# Check allocation status of dynamic array and it's dynamic members
|
||||
gdb_test "ptype fivedynarr" "type = <not allocated>"
|
||||
gdb_test "next" ""
|
||||
gdb_test "ptype fivedynarr(2)" \
|
||||
[multi_line "type = Type five" \
|
||||
"\\s+Type one" \
|
||||
"\\s+$int :: ivla\\\(<not allocated>\\\)" \
|
||||
"\\s+End Type one :: tone" \
|
||||
"End Type five" ]
|
||||
|
||||
# Check dynamic array of types containing a VLA
|
||||
gdb_breakpoint [gdb_get_line_number "fivedynarr-filled"]
|
||||
gdb_continue_to_breakpoint "fivedynarr-filled"
|
||||
gdb_test "print fivedynarr(1)%tone%ivla(1, 2, 3)" " = 1"
|
||||
gdb_test "print fivedynarr(1)%tone%ivla(2, 2, 10)" "no such vector element"
|
||||
gdb_test "print fivedynarr(1)%tone%ivla(2, 2, 3)" " = 223"
|
||||
gdb_test "print fivedynarr(2)%tone%ivla(12, 14, 16)" " = 2"
|
||||
gdb_test "print fivedynarr(2)%tone%ivla(6, 7, 8)" " = 678"
|
||||
gdb_test "ptype fivedynarr(1)" \
|
||||
[multi_line "type = Type five" \
|
||||
"\\s+Type one" \
|
||||
"\\s+$int :: ivla\\\(2,4,6\\\)" \
|
||||
"\\s+End Type one :: tone" \
|
||||
"End Type five" ]
|
||||
gdb_test "ptype fivedynarr(2)" \
|
||||
[multi_line "type = Type five" \
|
||||
"\\s+Type one" \
|
||||
"\\s+$int :: ivla\\\(12,14,16\\\)" \
|
||||
"\\s+End Type one :: tone" \
|
||||
"End Type five" ]
|
||||
|
@ -38,6 +38,8 @@ program vla_struct
|
||||
type(three) :: threev
|
||||
type(four) :: fourv
|
||||
type(five) :: fivev
|
||||
type(five) :: fivearr (2)
|
||||
type(five), allocatable :: fivedynarr (:)
|
||||
logical :: l
|
||||
integer :: i, j
|
||||
|
||||
@ -83,6 +85,20 @@ program vla_struct
|
||||
fivev%tone%ivla(1, 2, 3) = 123
|
||||
fivev%tone%ivla(3, 2, 1) = 321
|
||||
|
||||
! dummy statement for bp
|
||||
l = allocated(fivev%tone%ivla) ! fivev-filled
|
||||
allocate (fivearr(1)%tone%ivla (2, 4, 6)) ! fivev-filled
|
||||
allocate (fivearr(2)%tone%ivla (12, 14, 16))
|
||||
fivearr(1)%tone%ivla(:, :, :) = 1
|
||||
fivearr(1)%tone%ivla(2, 2, 3) = 223
|
||||
fivearr(2)%tone%ivla(:, :, :) = 2
|
||||
fivearr(2)%tone%ivla(6, 7, 8) = 678
|
||||
|
||||
allocate (fivedynarr(2)) ! fivearr-filled
|
||||
allocate (fivedynarr(1)%tone%ivla (2, 4, 6))
|
||||
allocate (fivedynarr(2)%tone%ivla (12, 14, 16))
|
||||
fivedynarr(1)%tone%ivla(:, :, :) = 1
|
||||
fivedynarr(1)%tone%ivla(2, 2, 3) = 223
|
||||
fivedynarr(2)%tone%ivla(:, :, :) = 2
|
||||
fivedynarr(2)%tone%ivla(6, 7, 8) = 678
|
||||
|
||||
l = allocated(fivedynarr) ! fivedynarr-filled
|
||||
end program vla_struct
|
||||
|
@ -207,6 +207,14 @@ value_subscripted_rvalue (struct value *array, LONGEST index, int lowerbound)
|
||||
error (_("no such vector element"));
|
||||
}
|
||||
|
||||
if (is_dynamic_type (elt_type))
|
||||
{
|
||||
CORE_ADDR address;
|
||||
|
||||
address = value_address (array) + elt_offs;
|
||||
elt_type = resolve_dynamic_type (elt_type, NULL, address);
|
||||
}
|
||||
|
||||
if (VALUE_LVAL (array) == lval_memory && value_lazy (array))
|
||||
v = allocate_value_lazy (elt_type);
|
||||
else
|
||||
|
Loading…
Reference in New Issue
Block a user