diff options
author | Keith Seitz <keiths@redhat.com> | 2014-04-16 14:12:22 -0700 |
---|---|---|
committer | Keith Seitz <keiths@redhat.com> | 2014-04-16 14:12:22 -0700 |
commit | fe28be73c7c22cc6eb1c3573f1be65c75e37d9b7 (patch) | |
tree | 001827e9b242fb0c53b5fa54dbb10aa4ee5a3ac8 /gdb/utils.c | |
parent | 8056826a68e7cb370425c56703a52af98fa159fe (diff) | |
download | gdb-fe28be73c7c22cc6eb1c3573f1be65c75e37d9b7.zip gdb-fe28be73c7c22cc6eb1c3573f1be65c75e37d9b7.tar.gz gdb-fe28be73c7c22cc6eb1c3573f1be65c75e37d9b7.tar.bz2 |
PR c++/16597
If lookup_symbol_file tries to locate a member variable with NULL name:
/* A simple lookup failed. Check if the symbol was defined in
a base class. */
cleanup = make_cleanup (null_cleanup, NULL);
/* Find the name of the class and the name of the method,
variable, etc. */
prefix_len = cp_entire_prefix_len (name);
/* If no prefix was found, search "this". */
if (prefix_len == 0)
{
struct type *type;
struct symbol *this;
this = lookup_language_this (language_def (language_cplus), block);
if (this == NULL)
{
do_cleanups (cleanup);
return NULL;
}
type = check_typedef (TYPE_TARGET_TYPE (SYMBOL_TYPE (this)));
klass = xstrdup (TYPE_NAME (type));
nested = xstrdup (name);
}
TYPE_NAME (type) is NULL, so xstrdup (NULL) and boom!
This can happen, e.g., with clang++. See testsuite/gdb.cp/namelessclass.exp
or the bugzilla report.
This patch simply adds a fencepost against this case, allowing the caller
of lookup_symbol_file to search other blocks for the right symbol.
Diffstat (limited to 'gdb/utils.c')
0 files changed, 0 insertions, 0 deletions