gdb/fortran: Handle dynamic string types when printing types
authorAndrew Burgess <andrew.burgess@embecosm.com>
Tue, 14 Jul 2020 09:10:07 +0000 (10:10 +0100)
committerAndrew Burgess <andrew.burgess@embecosm.com>
Wed, 15 Jul 2020 07:56:25 +0000 (08:56 +0100)
commit3dcc261cf8dfbf60075cc4617cec0b1aaab8896f
tree2214ba625e4a73450af5963507ead0f391187a37
parentf0e8d0bae403e33b8a3e8de5817d8f920e063f84
gdb/fortran: Handle dynamic string types when printing types

After commit:

  commit 8c2e4e0689ea244d0ed979171a3d09c9176b8175
  Date:   Sun Jul 12 22:58:51 2020 -0400

      gdb: add accessors to struct dynamic_prop

An existing bug was exposed in the Fortran type printing code.  When
GDB is asked to print the type of a function that takes a dynamic
string argument GDB will try to read the upper bound of the string.

The read of the upper bound is written as:

    if (type->bounds ()->high.kind () == PROP_UNDEFINED)
      // Treat the upper bound as unknown.
    else
      // Treat the upper bound as known and constant.

However, this is not good enough.  When printing a function type the
dynamic argument types will not have been resolved.  As a result the
dynamic property is not PROP_UNDEFINED, but nor is it constant.

By rewriting this code to specifically check for the PROP_CONST case,
and treating all other cases as the upper bound being unknown we avoid
incorrectly treating the dynamic property as being constant.

gdb/ChangeLog:

* f-typeprint.c (f_type_print_base): Allow for dynamic types not
being resolved.

gdb/testsuite/ChangeLog:

* gdb.fortran/ptype-on-functions.exp: Add more tests.
* gdb.fortran/ptype-on-functions.f90: Likewise.
gdb/ChangeLog
gdb/f-typeprint.c
gdb/testsuite/ChangeLog
gdb/testsuite/gdb.fortran/ptype-on-functions.exp
gdb/testsuite/gdb.fortran/ptype-on-functions.f90