aboutsummaryrefslogtreecommitdiff
path: root/gdb/symtab.c
diff options
context:
space:
mode:
authorSami Wagiaalla <swagiaal@redhat.com>2010-03-15 17:29:36 +0000
committerSami Wagiaalla <swagiaal@redhat.com>2010-03-15 17:29:36 +0000
commit13387711b26dfd93e5b00e529df30f0132ec38fd (patch)
tree1ba99c3985dc63eea2ec15eb5d6df734b4197b95 /gdb/symtab.c
parent6e31430b7070860436f93153ee1f8d832ca8b7ca (diff)
downloadfsf-binutils-gdb-13387711b26dfd93e5b00e529df30f0132ec38fd.zip
fsf-binutils-gdb-13387711b26dfd93e5b00e529df30f0132ec38fd.tar.gz
fsf-binutils-gdb-13387711b26dfd93e5b00e529df30f0132ec38fd.tar.bz2
2010-03-15 Sami Wagiaalla <swagiaal@redhat.com>
PR c++/7936: * cp-support.h: Added char *declaration element to using_direct data struct. (cp_add_using): Added char *declaration argument. (cp_add_using_directive): Ditto. (cp_lookup_symbol_imports): made extern. * cp-namespace.c: Updated with the above changes. * dwarf2read.c (read_import_statement): Ditto. (read_namespace): Ditto. (read_import_statement): Support import declarations. * cp-namespace.c (cp_lookup_symbol_imports): Check for imported declarations. Added support for 'declaration_only' search. (cp_lookup_symbol_namespace): Attempt to search for the name as is before consideration of imports. * symtab.c (lookup_symbol_aux_local): Added a 'declaration_only' search at every block level search. Now takes language argument. (lookup_symbol_aux): Updated. 2010-03-15 Sami Wagiaalla <swagiaal@redhat.com> * gdb.cp/shadow.exp: Removed kfail; test has been fix. * gdb.cp/nsusing.exp: Ditto.
Diffstat (limited to 'gdb/symtab.c')
-rw-r--r--gdb/symtab.c25
1 files changed, 20 insertions, 5 deletions
diff --git a/gdb/symtab.c b/gdb/symtab.c
index aa0aae6..78118ee 100644
--- a/gdb/symtab.c
+++ b/gdb/symtab.c
@@ -95,7 +95,8 @@ static struct symbol *lookup_symbol_aux (const char *name,
static
struct symbol *lookup_symbol_aux_local (const char *name,
const struct block *block,
- const domain_enum domain);
+ const domain_enum domain,
+ enum language language);
static
struct symbol *lookup_symbol_aux_symtabs (int block_index,
@@ -1029,12 +1030,12 @@ lookup_symbol_aux (const char *name, const struct block *block,
/* Search specified block and its superiors. Don't search
STATIC_BLOCK or GLOBAL_BLOCK. */
- sym = lookup_symbol_aux_local (name, block, domain);
+ sym = lookup_symbol_aux_local (name, block, domain, language);
if (sym != NULL)
return sym;
/* If requested to do so by the caller and if appropriate for LANGUAGE,
- check to see if NAME is a field of `this'. */
+ check to see if NAME is a field of `this'. */
langdef = language_def (language);
@@ -1107,11 +1108,13 @@ lookup_symbol_aux (const char *name, const struct block *block,
static struct symbol *
lookup_symbol_aux_local (const char *name, const struct block *block,
- const domain_enum domain)
+ const domain_enum domain,
+ enum language language)
{
struct symbol *sym;
const struct block *static_block = block_static_block (block);
-
+ const char *scope = block_scope (block);
+
/* Check if either no block is specified or it's a global block. */
if (static_block == NULL)
@@ -1123,6 +1126,18 @@ lookup_symbol_aux_local (const char *name, const struct block *block,
if (sym != NULL)
return sym;
+ if (language == language_cplus)
+ {
+ sym = cp_lookup_symbol_imports (scope,
+ name,
+ block,
+ domain,
+ 1,
+ 1);
+ if (sym != NULL)
+ return sym;
+ }
+
if (BLOCK_FUNCTION (block) != NULL && block_inlined_p (block))
break;
block = BLOCK_SUPERBLOCK (block);