forked from Imagelibrary/binutils-gdb
PR c++/16597
[forgot to commit/push these with previous push]
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.
This commit is contained in:
@@ -1,3 +1,9 @@
|
|||||||
|
2014-04-16 Keith Seitz <keiths@redhat.com>
|
||||||
|
|
||||||
|
PR c++/16597
|
||||||
|
* cp-namespace.c (lookup_symbol_file): If the type name of
|
||||||
|
`this' is NULL, return immediately.
|
||||||
|
|
||||||
2014-04-14 Keith Seitz <keiths@redhat.com>
|
2014-04-14 Keith Seitz <keiths@redhat.com>
|
||||||
|
|
||||||
PR c++/16253
|
PR c++/16253
|
||||||
|
|||||||
@@ -694,6 +694,11 @@ lookup_symbol_file (const char *name,
|
|||||||
}
|
}
|
||||||
|
|
||||||
type = check_typedef (TYPE_TARGET_TYPE (SYMBOL_TYPE (this)));
|
type = check_typedef (TYPE_TARGET_TYPE (SYMBOL_TYPE (this)));
|
||||||
|
/* If TYPE_NAME is NULL, abandon trying to find this symbol.
|
||||||
|
This can happen for lambda functions compiled with clang++,
|
||||||
|
which outputs no name for the container class. */
|
||||||
|
if (TYPE_NAME (type) == NULL)
|
||||||
|
return NULL;
|
||||||
klass = xstrdup (TYPE_NAME (type));
|
klass = xstrdup (TYPE_NAME (type));
|
||||||
nested = xstrdup (name);
|
nested = xstrdup (name);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,3 +1,10 @@
|
|||||||
|
2014-04-16 Keith Seitz <keiths@redhat.com>
|
||||||
|
|
||||||
|
PR c++/16597
|
||||||
|
* gdb.cp/namelessclass.cc: New file.
|
||||||
|
* gdb.cp/namelessclass.exp: New file.
|
||||||
|
* gdb.cp/namelessclass.S: New file.
|
||||||
|
|
||||||
2014-04-16 Doug Evans <dje@google.com>
|
2014-04-16 Doug Evans <dje@google.com>
|
||||||
|
|
||||||
* lib/gdbserver-support.exp (gdbserver_default_get_remote_address):
|
* lib/gdbserver-support.exp (gdbserver_default_get_remote_address):
|
||||||
|
|||||||
Reference in New Issue
Block a user