mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-05-28 22:21:26 +08:00
gdb/
* cp-namespace.c (cp_lookup_nested_type): New variable concatenated_name. Turn the current return condition into a reverse one. Call also lookup_static_symbol_aux on the constructed qualified name. * symtab.c (lookup_symbol_aux): Move variable objfile and searching in other files into a called ... (lookup_static_symbol_aux): ... new function here. * symtab.h (lookup_static_symbol_aux): New prototype. * valops.c (value_maybe_namespace_elt): Call also lookup_static_symbol_aux if we failed otherwise. gdb/testsuite/ * gdb.cp/namespace.exp (whatis C::cOtherFileType) (whatis ::C::cOtherFileType, whatis C::cOtherFileVar) (whatis ::C::cOtherFileVar, print C::cOtherFileVar) (print ::C::cOtherFileVar) (whatis C::OtherFileClass::cOtherFileClassType) (whatis ::C::OtherFileClass::cOtherFileClassType) (print C::OtherFileClass::cOtherFileClassVar) (print ::cOtherFileClassVar) (print ::C::OtherFileClass::cOtherFileClassVar): New tests. (ptype OtherFileClass, ptype ::C::OtherFileClass): Permit arbitrary trailing content. * gdb.cp/namespace1.cc (C::OtherFileClass::cOtherFileClassType) (C::OtherFileClass::cOtherFileClassVar) (C::OtherFileClass::cOtherFileClassVar_use, C::cOtherFileType) (C::cOtherFileVar, C::cOtherFileVar_use): New.
This commit is contained in:
@ -578,11 +578,24 @@ cp_lookup_nested_type (struct type *parent_type,
|
||||
nested_name,
|
||||
block,
|
||||
VAR_DOMAIN);
|
||||
char *concatenated_name;
|
||||
|
||||
if (sym == NULL || SYMBOL_CLASS (sym) != LOC_TYPEDEF)
|
||||
return NULL;
|
||||
else
|
||||
if (sym != NULL && SYMBOL_CLASS (sym) == LOC_TYPEDEF)
|
||||
return SYMBOL_TYPE (sym);
|
||||
|
||||
/* Now search all static file-level symbols. Not strictly correct,
|
||||
but more useful than an error. We do not try to guess any imported
|
||||
namespace as even the fully specified namespace seach is is already
|
||||
not C++ compliant and more assumptions could make it too magic. */
|
||||
|
||||
concatenated_name = alloca (strlen (parent_name) + 2
|
||||
+ strlen (nested_name) + 1);
|
||||
sprintf (concatenated_name, "%s::%s", parent_name, nested_name);
|
||||
sym = lookup_static_symbol_aux (concatenated_name, VAR_DOMAIN);
|
||||
if (sym != NULL && SYMBOL_CLASS (sym) == LOC_TYPEDEF)
|
||||
return SYMBOL_TYPE (sym);
|
||||
|
||||
return NULL;
|
||||
}
|
||||
default:
|
||||
internal_error (__FILE__, __LINE__,
|
||||
|
Reference in New Issue
Block a user