binutils-gdb/gdb/testsuite/gdb.python
Simon Marchi e25d6d93c4 gdb: fix getting range of flexible array member in Python
As reported in bug 27757, we get an internal error when doing:

    $ cat test.c
    struct foo {
        int len;
        int items[];
    };

    struct foo *p;

    int main() {
        return 0;
    }
    $ gcc test.c -g -O0 -o test
    $ ./gdb -q -nx --data-directory=data-directory ./test -ex 'python gdb.parse_and_eval("p").type.target()["items"].type.range()'
    Reading symbols from ./test...
    /home/simark/src/binutils-gdb/gdb/gdbtypes.h:435: internal-error: LONGEST dynamic_prop::const_val() const: Assertion `m_kind == PROP_CONST' failed.
    A problem internal to GDB has been detected,
    further debugging may prove unreliable.
    Quit this debugging session? (y or n)

This is because the Python code (typy_range) blindly reads the high
bound of the type of `items` as a constant value.  Since it is a
flexible array member, it has no high bound, the property is undefined.
Since commit 8c2e4e0689 ("gdb: add accessors to struct dynamic_prop"),
the getters check that you are not getting a property value of the wrong
kind, so this causes a failed assertion.

Fix it by checking if the property is indeed a constant value before
accessing it as such.  Otherwise, use 0.  This restores the previous GDB
behavior: because the structure was zero-initialized, this is what was
returned before.  But now this behavior is explicit and not accidental.

Add a test, gdb.python/flexible-array-member.exp, that is derived from
gdb.base/flexible-array-member.exp.  It tests the same things, but
through the Python API.  It also specifically tests getting the range
from the various kinds of flexible array member types (AFAIK it wasn't
possible to do the equivalent through the CLI).

gdb/ChangeLog:

	PR gdb/27757
	* python/py-type.c (typy_range): Check that bounds are constant
	before accessing them as such.
	* guile/scm-type.c (gdbscm_type_range): Likewise.

gdb/testsuite/ChangeLog:

	PR gdb/27757
	* gdb.python/flexible-array-member.c: New test.
	* gdb.python/flexible-array-member.exp: New test.
	* gdb.guile/scm-type.exp (test_range): Add test for flexible
	array member.
	* gdb.guile/scm-type.c (struct flex_member): New.
	(main): Use it.

Change-Id: Ibef92ee5fd871ecb7c791db2a788f203dff2b841
2021-04-22 15:01:28 -04:00
..
amd64-py-framefilter-invalidarg.S Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
compare-enum-type-a.c Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
compare-enum-type-b.c Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
compare-enum-type.exp Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
compare-enum-type.h Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
flexible-array-member.c gdb: fix getting range of flexible array member in Python 2021-04-22 15:01:28 -04:00
flexible-array-member.exp gdb: fix getting range of flexible array member in Python 2021-04-22 15:01:28 -04:00
lib-types.cc Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
lib-types.exp gdb/testsuite: check the correct Python variable in test 2021-03-12 12:18:33 +00:00
py-arch-reg-groups.exp Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-arch-reg-names.exp Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-arch.c Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-arch.exp Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-as-string.c Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-as-string.exp Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-auto-load-chaining-f1.c gdb: use make_scoped_restore to restore gdbpy_current_objfile 2021-03-15 09:21:37 +00:00
py-auto-load-chaining-f1.o-gdb.py gdb: use make_scoped_restore to restore gdbpy_current_objfile 2021-03-15 09:21:37 +00:00
py-auto-load-chaining-f2.c gdb: use make_scoped_restore to restore gdbpy_current_objfile 2021-03-15 09:21:37 +00:00
py-auto-load-chaining-f2.o-gdb.py gdb: use make_scoped_restore to restore gdbpy_current_objfile 2021-03-15 09:21:37 +00:00
py-auto-load-chaining.c gdb: use make_scoped_restore to restore gdbpy_current_objfile 2021-03-15 09:21:37 +00:00
py-auto-load-chaining.exp gdb: use make_scoped_restore to restore gdbpy_current_objfile 2021-03-15 09:21:37 +00:00
py-bad-printers.c Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-bad-printers.exp gdb/testsuite: resolve remaining duplicate test names in gdb.python/*.exp 2021-03-12 12:18:34 +00:00
py-bad-printers.py Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-block.c Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-block.exp gdb/testsuite: make test names unique in gdb.python/py-block.exp 2021-03-12 12:18:33 +00:00
py-breakpoint-create-fail.c Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-breakpoint-create-fail.exp Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-breakpoint-create-fail.py Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-breakpoint.c Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-breakpoint.exp Add Python support for hardware breakpoints 2021-01-21 18:55:45 +01:00
py-caller-is.c Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-caller-is.exp Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-cmd.c Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-cmd.exp Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-completion.exp Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-completion.py Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-error.exp Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-error.py Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-events-shlib.c Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-events.c Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-events.exp gdb/testsuite: resolve remaining duplicate test names in gdb.python/*.exp 2021-03-12 12:18:34 +00:00
py-events.py Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-evsignal.exp Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-evthreads.c Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-evthreads.exp Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-explore-cc.exp gdb/testsuite: make test names unique in gdb.python/py-explore-cc.exp 2021-03-12 12:18:33 +00:00
py-explore.c Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-explore.cc Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-explore.exp gdb/testsuite: make test names unique in gdb.python/py-explore.exp 2021-03-12 12:18:33 +00:00
py-finish-breakpoint.c Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-finish-breakpoint.exp gdb/testsuite: make test names unique in gdb.python/py-finish-breakpoint.exp 2021-03-12 12:18:33 +00:00
py-finish-breakpoint.py Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-finish-breakpoint2.cc Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-finish-breakpoint2.exp gdb/testsuite: resolve remaining duplicate test names in gdb.python/*.exp 2021-03-12 12:18:34 +00:00
py-finish-breakpoint2.py Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-format-string.c Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-format-string.exp gdb/testsuite: make test names unique in gdb.python/py-format-string.exp 2021-03-12 12:18:33 +00:00
py-format-string.py Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-frame-args.c Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-frame-args.exp Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-frame-args.py Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-frame-inline.c Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-frame-inline.exp gdb/testsuite: resolve remaining duplicate test names in gdb.python/*.exp 2021-03-12 12:18:34 +00:00
py-frame.c
py-frame.exp gdb/testsuite: resolve remaining duplicate test names in gdb.python/*.exp 2021-03-12 12:18:34 +00:00
py-framefilter-addr.c gdb/python: fix FrameDecorator regression on Python 2 2021-03-16 09:31:56 +00:00
py-framefilter-addr.exp gdb/python: fix FrameDecorator regression on Python 2 2021-03-16 09:31:56 +00:00
py-framefilter-addr.py gdb/python: fix FrameDecorator regression on Python 2 2021-03-16 09:31:56 +00:00
py-framefilter-gdb.py.in Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-framefilter-invalidarg-gdb.py.in Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-framefilter-invalidarg.exp Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-framefilter-invalidarg.py Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-framefilter-mi.c Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-framefilter-mi.exp Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-framefilter.c Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-framefilter.exp gdb/python: reformat an error string 2021-02-08 11:03:54 +00:00
py-framefilter.py Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-function.exp Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-inferior.c
py-inferior.exp Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-infthread.c
py-infthread.exp gdb/testsuite: resolve remaining duplicate test names in gdb.python/*.exp 2021-03-12 12:18:34 +00:00
py-lazy-string.c Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-lazy-string.exp Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-linetable.c Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-linetable.exp Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-linetable.S Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-lookup-type.exp gdb/testsuite: remove a duplicate test 2021-03-12 12:18:33 +00:00
py-mi-events-gdb.py Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-mi-events.c Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-mi-events.exp Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-mi-objfile-gdb.py Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-mi-objfile.c Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-mi-objfile.exp Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-mi-var-info-path-expression.c Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-mi-var-info-path-expression.exp Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-mi-var-info-path-expression.py Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-mi.exp gdb/testsuite: make test names unique in gdb.python/py-mi.exp 2021-03-12 12:18:33 +00:00
py-nested-maps.c Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-nested-maps.exp Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-nested-maps.py Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-objfile-script-gdb.py Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-objfile-script.c Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-objfile-script.exp Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-objfile.c Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-objfile.exp Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-parameter.exp gdb/testsuite: don't include paths in test names 2021-04-15 21:33:58 +01:00
py-pp-integral.c Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-pp-integral.exp Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-pp-integral.py Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-pp-maint.c Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-pp-maint.exp gdb/testsuite: make test names unique in gdb.python/py-pp-maint.exp 2021-03-12 12:18:33 +00:00
py-pp-maint.py Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-pp-re-notag.c Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-pp-re-notag.exp Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-pp-re-notag.py Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-pp-registration.c Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-pp-registration.exp Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-pp-registration.py Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-prettyprint.c gdb/testsuite: more testing of pretty printer 'array' display_hint 2021-03-26 17:43:14 +00:00
py-prettyprint.exp gdb/testsuite: more testing of pretty printer 'array' display_hint 2021-03-26 17:43:14 +00:00
py-prettyprint.py gdb/testsuite: more testing of pretty printer 'array' display_hint 2021-03-26 17:43:14 +00:00
py-progspace.c Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-progspace.exp Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-prompt.c Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-prompt.exp gdb/testsuite: make test names unique in gdb.python/py-prompt.exp 2021-03-12 12:18:33 +00:00
py-rbreak-func2.c Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-rbreak.c Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-rbreak.exp Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-record-btrace-threads.c Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-record-btrace-threads.exp Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-record-btrace.c Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-record-btrace.exp Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-record-full.c Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-record-full.exp Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-recurse-unwind.c Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-recurse-unwind.exp Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-recurse-unwind.py Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-rvalue-ref-value-cc.cc Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-rvalue-ref-value-cc.exp Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-section-script.c Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-section-script.exp gdb: Remove arm-symbianelf support 2021-02-11 07:23:42 +10:30
py-section-script.py Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-shared-sl.c Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-shared.c Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-shared.exp Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-strfns.c Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-strfns.exp gdb/testsuite: make test names unique in gdb.python/py-strfns.exp 2021-03-12 12:18:33 +00:00
py-symbol-2.c Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-symbol.c Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-symbol.exp Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-symtab.exp gdb/testsuite: make test names unique in gdb.python/py-symtab.exp 2021-03-12 12:18:33 +00:00
py-sync-interp.c Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-sync-interp.exp Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-template.cc Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-template.exp Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-thrhandle.c Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-thrhandle.exp Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-type.c Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-type.exp Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-typeprint.cc Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-typeprint.exp Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-typeprint.py Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-unwind-inline.c Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-unwind-inline.exp Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-unwind-inline.py Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-unwind-maint.c Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-unwind-maint.exp Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-unwind-maint.py Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-unwind.c Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-unwind.exp Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-unwind.py Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-value-cc.cc Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-value-cc.exp gdb/testsuite: remove duplicate test from gdb.python/py-value-cc.exp 2021-03-12 12:18:34 +00:00
py-value.c Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-value.exp Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-xmethods.cc Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-xmethods.exp Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-xmethods.py Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
python-1.c Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
python.c Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
python.exp gdb/python: reformat an error string 2021-02-08 11:03:54 +00:00
source1 Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
source2.py Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
tui-window-disabled.c gdb: return true in TuiWindow.is_valid only if TUI is enabled 2021-02-08 11:56:16 +00:00
tui-window-disabled.exp gdb: return true in TuiWindow.is_valid only if TUI is enabled 2021-02-08 11:56:16 +00:00
tui-window-disabled.py gdb: return true in TuiWindow.is_valid only if TUI is enabled 2021-02-08 11:56:16 +00:00
tui-window.exp gdb/python: don't allow the user to delete window title attributes 2021-02-08 11:55:05 +00:00
tui-window.py gdb/python: don't allow the user to delete window title attributes 2021-02-08 11:55:05 +00:00