summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Tromey <tom@tromey.com>2023-09-19 17:51:36 -0600
committerTom Tromey <tom@tromey.com>2024-01-28 10:58:17 -0700
commit415ea5e3e5115ff4a2c5d793761af913765a9f36 (patch)
tree6343638fac5fbddba9ba26f79331816539e009bc
parent6cd92f3b86f510c3e321b922ca77cd42c83b7826 (diff)
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.
-rw-r--r--gdb/cp-namespace.c19
1 files changed, 12 insertions, 7 deletions
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 {};