From: Tom Tromey Date: Tue, 19 Sep 2023 23:51:36 +0000 (-0600) Subject: Refine search in cp_search_static_and_baseclasses X-Git-Tag: gdb-15-branchpoint~1098 X-Git-Url: http://git.ipfire.org/gitweb/gitweb.cgi?a=commitdiff_plain;h=415ea5e3e5115ff4a2c5d793761af913765a9f36;p=thirdparty%2Fbinutils-gdb.git Refine search in cp_search_static_and_baseclasses This changes cp_search_static_and_baseclasses to only search for types, functions, and modules. The latter two cases were discovered by regression testing. I found it somewhat surprising the Fortran name lookup ends up in this code, but did not attempt to change this. --- diff --git a/gdb/cp-namespace.c b/gdb/cp-namespace.c index 593340af350..41ab52de54a 100644 --- a/gdb/cp-namespace.c +++ b/gdb/cp-namespace.c @@ -268,14 +268,19 @@ cp_search_static_and_baseclasses (const char *name, const char *nested = name + prefix_len + 2; /* Lookup the scope symbol. If none is found, there is nothing more - that can be done. SCOPE could be a namespace, so always look in - VAR_DOMAIN. This works for classes too because of - symbol_matches_domain (which should be replaced with something - else, but it's what we have today). */ - block_symbol scope_sym = lookup_symbol_in_static_block (scope.c_str (), - block, SEARCH_VFT); + that can be done. SCOPE could be a namespace, a class, or even a + function. This code is also used by Fortran, so modules are + included in the search as well. */ + block_symbol scope_sym + = lookup_symbol_in_static_block (scope.c_str (), block, + SEARCH_TYPE_DOMAIN + | SEARCH_FUNCTION_DOMAIN + | SEARCH_MODULE_DOMAIN); if (scope_sym.symbol == NULL) - scope_sym = lookup_global_symbol (scope.c_str (), block, SEARCH_VFT); + scope_sym = lookup_global_symbol (scope.c_str (), block, + SEARCH_TYPE_DOMAIN + | SEARCH_FUNCTION_DOMAIN + | SEARCH_MODULE_DOMAIN); if (scope_sym.symbol == NULL) return {};