Catch exception in value_rtti_indirect_type
authorSimon Marchi <simon.marchi@ericsson.com>
Fri, 23 Jan 2015 17:59:24 +0000 (12:59 -0500)
committerSimon Marchi <simon.marchi@ericsson.com>
Fri, 23 Jan 2015 17:59:24 +0000 (12:59 -0500)
commitf7e5394d614db4456fc0d9598bbfa936cc7941af
treee3a731b5d4b6f06ec2978a8d27ebc22a2ba21c47
parentbb97bdd70c9a4614416767e5fc7ea8d75b24b0b8
Catch exception in value_rtti_indirect_type

In the situation described in bug 17416 [1]:

  * "set print object" is on;
  * The variable object is a pointer to a struct, and it contains an
    invalid value (e.g. NULL, or random uninitialized value);
  * The variable object (struct) has a child which is also a pointer to a
    struct;
  * We try to use "-var-list-children".

... an exception thrown in value_ind can propagate too far and leave an
half-built variable object, leading to a wrong state. This patch adds a
TRY_CATCH to catch it and makes value_rtti_indirect_type return NULL in
that case, meaning that the type of the pointed object could not be
found.

A test for the fix is also added.

New in v2:

  * Added test.
  * Restructured "catch" code.
  * Added details about the bug in commit log.

gdb/Changelog:

* valops.c (value_rtti_indirect_type): Catch exception thrown by
value_ind.

gdb/testsuite/ChangeLog

* gdb.mi/mi-var-list-children-invalid-grandchild.c: New file.
* gdb.mi/mi-var-list-children-invalid-grandchild.exp: New file.

[1] https://sourceware.org/bugzilla/show_bug.cgi?id=17416
gdb/ChangeLog
gdb/testsuite/ChangeLog
gdb/testsuite/gdb.mi/mi-var-list-children-invalid-grandchild.c [new file with mode: 0644]
gdb/testsuite/gdb.mi/mi-var-list-children-invalid-grandchild.exp [new file with mode: 0644]
gdb/valops.c