gdb/fortran: Don't include module symbols when searching for types

Currently the 'info types' command will return symbols that correspond
to Fortran modules.  This is because the symbols are created with
domain MODULE_DOMAIN and address_class LOC_TYPEDEF.  The address_class
LOC_TYPEDEF is the same address_class used for type symbols which is
why the modules show up when listing types.

This commit explicitly prevents symbols in the MODULE_DOMAIN from
appearing when we search for symbols in the TYPES_DOMAIN, this
prevents the Fortran module symbols from appearing in the output of
'info types'.

gdb/ChangeLog:

	* symtab.c (search_symbols): Don't include MODULE_DOMAIN symbols
	when searching for types.

gdb/testsuite/ChangeLog:

	* gdb.fortran/info-types.exp: Add module.
	* gdb.fortran/info-types.f90: Update expected results.
This commit is contained in:
Andrew Burgess 2019-07-09 15:49:07 +01:00
parent 1f20c35ea4
commit d8f27c6018
5 changed files with 26 additions and 2 deletions

View File

@ -1,3 +1,8 @@
2019-08-28 Andrew Burgess <andrew.burgess@embecosm.com>
* symtab.c (search_symbols): Don't include MODULE_DOMAIN symbols
when searching for types.
2019-08-28 Andrew Burgess <andrew.burgess@embecosm.com>
* f-lang.c (f_language_defn): Use f_print_typedef.

View File

@ -4659,7 +4659,8 @@ search_symbols (const char *regexp, enum search_domain kind,
|| treg_matches_sym_type_name (*treg,
sym)))
|| (kind == TYPES_DOMAIN
&& SYMBOL_CLASS (sym) == LOC_TYPEDEF))))
&& SYMBOL_CLASS (sym) == LOC_TYPEDEF
&& SYMBOL_DOMAIN (sym) != MODULE_DOMAIN))))
{
/* match */
result.emplace_back (i, sym);

View File

@ -1,3 +1,8 @@
2019-08-28 Andrew Burgess <andrew.burgess@embecosm.com>
* gdb.fortran/info-types.exp: Add module.
* gdb.fortran/info-types.f90: Update expected results.
2019-08-28 Andrew Burgess <andrew.burgess@embecosm.com>
* gdb.fortran/info-types.exp: New file.

View File

@ -42,4 +42,6 @@ gdb_test "info types" \
"\[\t \]+${character1}" \
"\[\t \]+${integer4}" \
"\[\t \]+${logical4}" \
"16:\[\t \]+Type s1;" ]
"20:\[\t \]+Type __vtype_mod1_M1t1;" \
"17:\[\t \]+Type m1t1;" \
"22:\[\t \]+Type s1;" ]

View File

@ -13,13 +13,24 @@
! You should have received a copy of the GNU General Public License
! along with this program. If not, see <http://www.gnu.org/licenses/>.
module mod1
type :: m1t1
integer :: b
end type m1t1
end module mod1
program info_types_test
use mod1
type :: s1
integer :: a
end type s1
logical :: l
type (s1) :: var_a
type (m1t1) :: var_b
var_a%a = 1
var_b%b = 2
l = .FALSE.
end program info_types_test