old-cross-binutils/gdb/testsuite/gdb.dwarf2
Joel Brobecker eb47903935 Ada: Print bounds/length of pointer to array with dynamic bounds
Trying to print the bounds or the length of a pointer to an array
whose bounds are dynamic results in the following error:

    (gdb) p foo.three_ptr.all'first
    Location address is not set.
    (gdb) p foo.three_ptr.all'length
    Location address is not set.

This is because, after having dereferenced our array pointer, we
use the type of the resulting array value, instead of the enclosing
type.  The former is the original type where the bounds are unresolved,
whereas we need to get the actual array bounds.

Similarly, trying to apply those attributes to the array pointer
directly (without explicitly dereferencing it with the '.all'
operator) yields the same kind of error:

    (gdb) p foo.three_ptr'first
    Location address is not set.
    (gdb) p foo.three_ptr'length
    Location address is not set.

This is caused by the fact that the dereference was done implicitly
in this case, and perform at the type level only, which is not
sufficient in order to resolve the array type.

This patch fixes both issues, thus allowing us to get the expected output:

    (gdb) p foo.three_ptr.all'first
    $1 = 1
    (gdb) p foo.three_ptr.all'length
    $2 = 3
    (gdb) p foo.three_ptr'first
    $3 = 1
    (gdb) p foo.three_ptr'length
    $4 = 3

gdb/ChangeLog:

        * ada-lang.c (ada_array_bound): If ARR is a TYPE_CODE_PTR,
        dereference it first.  Use value_enclosing_type instead of
        value_type.
        (ada_array_length): Likewise.

gdb/testsuite/ChangeLog:

        * gdb.dwarf2/dynarr-ptr.exp: Add 'first, 'last and 'length tests.
2014-09-10 06:32:00 -07:00
..
arr-stride.c
arr-stride.exp
arr-subrange.c
arr-subrange.exp
callframecfa.exp
callframecfa.S
clztest.c
clztest.exp
clztest.S
corrupt.c PR gdb/15827 2014-04-16 14:39:10 -07:00
corrupt.exp PR gdb/15827 2014-04-16 14:39:10 -07:00
count.exp test: cover subranges with present DW_AT_count attribute 2014-04-14 09:23:44 -07:00
data-loc.c DW_AT_data_location and DW_OP_push_object_address testcase. 2014-08-18 18:14:14 +02:00
data-loc.exp Fix handling of typedefs to types having a data_location attribute. 2014-08-20 15:34:19 +02:00
dup-psym.exp
dup-psym.S
dw2-abs-hi-pc-hello-dbg.S
dw2-abs-hi-pc-hello.c
dw2-abs-hi-pc-world-dbg.S
dw2-abs-hi-pc-world.c
dw2-abs-hi-pc.c
dw2-abs-hi-pc.exp * gdb.dwarf2/dw2-abs-hi-pc.exp: Build tests with "nodebug". 2014-03-27 11:38:30 -07:00
dw2-ada-ffffffff.exp Revert patchset for c++/16253: it causes a large performance regression. 2014-06-07 10:40:39 -07:00
dw2-ada-ffffffff.S
dw2-anon-mptr.exp Revert patchset for c++/16253: it causes a large performance regression. 2014-06-07 10:40:39 -07:00
dw2-anon-mptr.S
dw2-anonymous-func.exp Copy file1.txt to remote host in dw2-filename.exp and dw2-anonymous-func.exp 2014-05-16 20:24:50 +08:00
dw2-anonymous-func.S
dw2-bad-parameter-type.exp
dw2-bad-parameter-type.S
dw2-basic.exp
dw2-basic.S
dw2-canonicalize-type.exp
dw2-canonicalize-type.S
dw2-case-insensitive-debug.S
dw2-case-insensitive.c
dw2-case-insensitive.exp
dw2-common-block.exp
dw2-common-block.S
dw2-compdir-oldgcc.exp
dw2-compdir-oldgcc.S
dw2-compressed.exp
dw2-compressed.S
dw2-const.exp
dw2-const.S
dw2-cp-infcall-ref-static-main.c
dw2-cp-infcall-ref-static.exp
dw2-cp-infcall-ref-static.S
dw2-cu-size.exp
dw2-cu-size.S
dw2-dir-file-name.c
dw2-dir-file-name.exp
dw2-dos-drive.exp
dw2-dos-drive.S
dw2-double-set-die-type.exp Revert patchset for c++/16253: it causes a large performance regression. 2014-06-07 10:40:39 -07:00
dw2-double-set-die-type.S
dw2-dup-frame.c
dw2-dup-frame.exp
dw2-dup-frame.S
dw2-empty-namespace.exp
dw2-empty-namespace.S
dw2-empty-pc-range.exp
dw2-empty-pc-range.S
dw2-entry-value-main.c
dw2-entry-value.exp
dw2-entry-value.S
dw2-error.c
dw2-error.exp testsuite: Use istarget and is_lp64_target for 3 testcases. 2014-06-23 08:24:36 +02:00
dw2-error.S
dw2-filename.exp Copy file1.txt to remote host in dw2-filename.exp and dw2-anonymous-func.exp 2014-05-16 20:24:50 +08:00
dw2-filename.S
dw2-icc-opaque.exp
dw2-icc-opaque.S
dw2-icycle.c
dw2-icycle.exp
dw2-icycle.S
dw2-ifort-parameter.c Fix dw2-ifort-parameter.exp on PPC64 2014-03-12 16:22:19 +01:00
dw2-ifort-parameter.exp Fix dw2-ifort-parameter.exp on PPC64 2014-03-12 16:22:19 +01:00
dw2-inheritance.exp Revert patchset for c++/16253: it causes a large performance regression. 2014-06-07 10:40:39 -07:00
dw2-inheritance.S
dw2-inline-break.exp
dw2-inline-break.S
dw2-inline-param-main.c
dw2-inline-param.exp
dw2-inline-param.S
dw2-intercu.exp
dw2-intercu.S
dw2-intermix.exp
dw2-intermix.S
dw2-linkage-name-trust-main.cc
dw2-linkage-name-trust.exp
dw2-linkage-name-trust.S
dw2-minsym-in-cu.exp
dw2-minsym-in-cu.S
dw2-modula2-self-type.exp
dw2-modula2-self-type.S
dw2-namespaceless-anonymous.exp
dw2-namespaceless-anonymous.S
dw2-noloc-main.c
dw2-noloc.exp
dw2-noloc.S
dw2-objfile-overlap-inner.S
dw2-objfile-overlap-outer.S
dw2-objfile-overlap.exp
dw2-op-call.exp
dw2-op-call.S
dw2-op-out-param.exp Handle partially optimized out values similarly to unavailable values 2014-08-20 00:07:40 +01:00
dw2-op-out-param.S
dw2-op-stack-value.exp
dw2-op-stack-value.S
dw2-param-error-main.c
dw2-param-error.exp
dw2-param-error.S
dw2-producer.exp
dw2-producer.S
dw2-ranges.c
dw2-ranges.exp
dw2-ranges2.c
dw2-ranges3.c
dw2-ref-missing-frame-func.c
dw2-ref-missing-frame-main.c
dw2-ref-missing-frame.exp
dw2-ref-missing-frame.S
dw2-reg-undefined.c
dw2-reg-undefined.exp
dw2-reg-undefined.S
dw2-restore.exp
dw2-restore.S
dw2-restrict.c
dw2-restrict.exp
dw2-restrict.S
dw2-simple-locdesc.exp
dw2-simple-locdesc.S
dw2-single-line-discriminators.c Fix pr 17276. 2014-08-22 17:25:59 -07:00
dw2-single-line-discriminators.exp Fix pr 17276. 2014-08-22 17:25:59 -07:00
dw2-single-line-discriminators.S Fix pr 17276. 2014-08-22 17:25:59 -07:00
dw2-skip-prologue.c
dw2-skip-prologue.exp
dw2-skip-prologue.S
dw2-stack-boundary.exp
dw2-stack-boundary.S
dw2-strp.exp
dw2-strp.S
dw2-undefined-ret-addr.c
dw2-undefined-ret-addr.exp
dw2-undefined-ret-addr.S
dw2-unresolved-main.c
dw2-unresolved.exp
dw2-unresolved.S
dw2-var-zero-addr.exp
dw2-var-zero-addr.S
dw4-sig-type-unused.exp
dw4-sig-type-unused.S
dw4-sig-types-b.cc
dw4-sig-types.cc
dw4-sig-types.exp
dw4-sig-types.h
dwp-symlink.c
dwp-symlink.exp
dwz.exp Compute the function length instead of hard coding it 2014-04-26 10:45:06 +08:00
dwzbuildid.exp Relax the pattern in dwzbuildid.exp 2014-05-07 11:07:12 +08:00
dynarr-ptr.c print PTR.all where PTR is an Ada thin pointer 2014-09-10 06:24:25 -07:00
dynarr-ptr.exp Ada: Print bounds/length of pointer to array with dynamic bounds 2014-09-10 06:32:00 -07:00
enum-type.exp implement support for "enum class" 2014-04-14 11:42:18 -06:00
file1.txt
fission-base.c
fission-base.exp
fission-base.S
fission-loclists.exp
fission-loclists.S
fission-mix.c
fission-mix.exp
fission-mix.h
fission-mix2.c
fission-reread.exp Make more robust when run in parallel mode. 2014-05-15 15:50:34 -07:00
fission-reread.S Make more robust when run in parallel mode. 2014-05-15 15:50:34 -07:00
gdb-index.exp
implptr-64bit.exp
implptr-64bit.S
implptr-optimized-out.exp
implptr-optimized-out.S
implptr.c
implptr.exp
implptr.S
implptrconst.c
implptrconst.exp
implptrpiece.exp
mac-fileno.exp
mac-fileno.S
main.c
Makefile.in
member-ptr-forwardref.exp
member-ptr-forwardref.S
method-ptr.cc
method-ptr.exp
missing-sig-type.exp
nostaticblock.exp
pieces-optimized-out.c
pieces-optimized-out.exp
pieces-optimized-out.S
pieces.c
pieces.exp
pieces.S
pr10770.c
pr10770.exp
pr11465.exp
pr11465.S
pr13961.exp
pr13961.S
subrange.exp
trace-crash.exp
trace-crash.S
typeddwarf-amd64.S
typeddwarf.c
typeddwarf.exp
typeddwarf.S
valop.exp
valop.S
watch-notconst.c
watch-notconst.exp
watch-notconst2.c
watch-notconst2.S