2010-01-14 Sami Wagiaalla <swagiaal@redhat.com>
* gdb.cp/nsrecurs.exp: New test. * gdb.cp/nsrecurs.cc: New test program. * gdb.cp/nsstress.exp: New test. * gdb.cp/nsstress.cc: New test program. * gdb.cp/nsdecl.exp: New test. * gdb.cp/nsdecl.cc: New test program. 2010-01-26 Sami Wagiaalla <swagiaal@redhat.com> * cp-namespace.c (cp_lookup_symbol_namespace): Added search_parent argument. (cp_add_using): Initialize 'searched' field. (reset_directive_searched): New function. * cp-support.h: Add 'searched' field to using_direct struct. (cp_lookup_symbol_imports): Ditto. * cp-namespace.c (cp_lookup_symbol_imports): Ditto. Perform recursive search. Implement non parent search. * valops.c (value_maybe_namespace_elt): Updated.
This commit is contained in:
parent
8540c487c6
commit
b14e635ec4
11 changed files with 444 additions and 16 deletions
|
@ -1,3 +1,16 @@
|
||||||
|
2010-01-26 Sami Wagiaalla <swagiaal@redhat.com>
|
||||||
|
|
||||||
|
* cp-namespace.c (cp_lookup_symbol_namespace): Added
|
||||||
|
search_parent argument.
|
||||||
|
(cp_add_using): Initialize 'searched' field.
|
||||||
|
(reset_directive_searched): New function.
|
||||||
|
* cp-support.h: Add 'searched' field to using_direct struct.
|
||||||
|
(cp_lookup_symbol_imports): Ditto.
|
||||||
|
* cp-namespace.c (cp_lookup_symbol_imports): Ditto.
|
||||||
|
Perform recursive search.
|
||||||
|
Implement non parent search.
|
||||||
|
* valops.c (value_maybe_namespace_elt): Updated.
|
||||||
|
|
||||||
2010-01-26 Sami Wagiaalla <swagiaal@redhat.com>
|
2010-01-26 Sami Wagiaalla <swagiaal@redhat.com>
|
||||||
|
|
||||||
PR gdb/10929:
|
PR gdb/10929:
|
||||||
|
|
|
@ -215,6 +215,7 @@ cp_add_using (const char *dest,
|
||||||
retval->import_src = savestring (src, strlen(src));
|
retval->import_src = savestring (src, strlen(src));
|
||||||
retval->import_dest = savestring (dest, strlen(dest));
|
retval->import_dest = savestring (dest, strlen(dest));
|
||||||
retval->next = next;
|
retval->next = next;
|
||||||
|
retval->searched = 0;
|
||||||
|
|
||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
|
@ -240,7 +241,8 @@ cp_lookup_symbol_nonlocal (const char *name,
|
||||||
if (sym != NULL)
|
if (sym != NULL)
|
||||||
return sym;
|
return sym;
|
||||||
|
|
||||||
return cp_lookup_symbol_namespace (scope, name, linkage_name, block, domain);
|
return cp_lookup_symbol_namespace (scope, name, linkage_name, block, domain,
|
||||||
|
1);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Look up NAME in the C++ namespace NAMESPACE. Other arguments are as in
|
/* Look up NAME in the C++ namespace NAMESPACE. Other arguments are as in
|
||||||
|
@ -270,19 +272,46 @@ cp_lookup_symbol_in_namespace (const char *namespace,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Used for cleanups to reset the "searched" flag incase
|
||||||
|
of an error. */
|
||||||
|
|
||||||
|
static void
|
||||||
|
reset_directive_searched (void *data)
|
||||||
|
{
|
||||||
|
struct using_direct *direct = data;
|
||||||
|
direct->searched = 0;
|
||||||
|
}
|
||||||
|
|
||||||
/* Search for NAME by applying all import statements belonging
|
/* Search for NAME by applying all import statements belonging
|
||||||
to BLOCK which are applicable in SCOPE. */
|
to BLOCK which are applicable in SCOPE.
|
||||||
|
If SEARCH_PARENTS the search will include imports which are applicable in
|
||||||
|
parents of SCOPE.
|
||||||
|
Example:
|
||||||
|
|
||||||
|
namespace A{
|
||||||
|
using namespace X;
|
||||||
|
namespace B{
|
||||||
|
using namespace Y;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
If SCOPE is "A::B" and SEARCH_PARENTS is true the imports of namespaces X
|
||||||
|
and Y will be considered. If SEARCH_PARENTS is false only the import of Y
|
||||||
|
is considered. */
|
||||||
|
|
||||||
static struct symbol *
|
static struct symbol *
|
||||||
cp_lookup_symbol_imports (const char *scope,
|
cp_lookup_symbol_imports (const char *scope,
|
||||||
const char *name,
|
const char *name,
|
||||||
const char *linkage_name,
|
const char *linkage_name,
|
||||||
const struct block *block,
|
const struct block *block,
|
||||||
const domain_enum domain)
|
const domain_enum domain,
|
||||||
|
const int search_parents)
|
||||||
{
|
{
|
||||||
const struct using_direct *current;
|
struct using_direct *current;
|
||||||
struct symbol *sym;
|
struct symbol *sym;
|
||||||
int len;
|
int len;
|
||||||
|
int directive_match;
|
||||||
|
struct cleanup *searched_cleanup;
|
||||||
|
|
||||||
/* First, try to find the symbol in the given namespace. */
|
/* First, try to find the symbol in the given namespace. */
|
||||||
sym = cp_lookup_symbol_in_namespace (scope, name, linkage_name, block,
|
sym = cp_lookup_symbol_in_namespace (scope, name, linkage_name, block,
|
||||||
|
@ -298,15 +327,33 @@ cp_lookup_symbol_imports (const char *scope,
|
||||||
current != NULL;
|
current != NULL;
|
||||||
current = current->next)
|
current = current->next)
|
||||||
{
|
{
|
||||||
|
len = strlen (current->import_dest);
|
||||||
|
directive_match = (search_parents
|
||||||
|
? (strncmp (scope, current->import_dest,
|
||||||
|
strlen (current->import_dest)) == 0
|
||||||
|
&& (len == 0
|
||||||
|
|| scope[len] == ':' || scope[len] == '\0'))
|
||||||
|
: strcmp (scope, current->import_dest) == 0);
|
||||||
|
|
||||||
/* If the import destination is the current scope or one of its ancestors then
|
/* If the import destination is the current scope or one of its ancestors then
|
||||||
it is applicable. */
|
it is applicable. */
|
||||||
len = strlen (current->import_dest);
|
if (directive_match && !current->searched)
|
||||||
if (strncmp (scope, current->import_dest, len) == 0
|
|
||||||
&& (len == 0 || scope[len] == ':' || scope[len] == '\0'))
|
|
||||||
{
|
{
|
||||||
sym = cp_lookup_symbol_in_namespace (current->import_src, name,
|
/* Mark this import as searched so that the recursive call does not
|
||||||
linkage_name, block, domain);
|
search it again. */
|
||||||
|
current->searched = 1;
|
||||||
|
searched_cleanup = make_cleanup (reset_directive_searched, current);
|
||||||
|
|
||||||
|
sym = cp_lookup_symbol_namespace (current->import_src,
|
||||||
|
name,
|
||||||
|
linkage_name,
|
||||||
|
block,
|
||||||
|
domain,
|
||||||
|
0);
|
||||||
|
|
||||||
|
current->searched = 0;
|
||||||
|
discard_cleanups (searched_cleanup);
|
||||||
|
|
||||||
if (sym != NULL)
|
if (sym != NULL)
|
||||||
return sym;
|
return sym;
|
||||||
}
|
}
|
||||||
|
@ -315,7 +362,6 @@ cp_lookup_symbol_imports (const char *scope,
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Searches for NAME in the current namespace, and by applying relevant import
|
/* Searches for NAME in the current namespace, and by applying relevant import
|
||||||
statements belonging to BLOCK and its parents. SCOPE is the namespace scope
|
statements belonging to BLOCK and its parents. SCOPE is the namespace scope
|
||||||
of the context in which the search is being evaluated. */
|
of the context in which the search is being evaluated. */
|
||||||
|
@ -325,14 +371,16 @@ cp_lookup_symbol_namespace (const char *scope,
|
||||||
const char *name,
|
const char *name,
|
||||||
const char *linkage_name,
|
const char *linkage_name,
|
||||||
const struct block *block,
|
const struct block *block,
|
||||||
const domain_enum domain)
|
const domain_enum domain,
|
||||||
|
const int search_parents)
|
||||||
{
|
{
|
||||||
struct symbol *sym;
|
struct symbol *sym;
|
||||||
|
|
||||||
/* Search for name in namespaces imported to this and parent blocks. */
|
/* Search for name in namespaces imported to this and parent blocks. */
|
||||||
while (block != NULL)
|
while (block != NULL)
|
||||||
{
|
{
|
||||||
sym = cp_lookup_symbol_imports (scope,name, linkage_name, block, domain);
|
sym = cp_lookup_symbol_imports (scope, name, linkage_name, block, domain,
|
||||||
|
search_parents);
|
||||||
|
|
||||||
if (sym)
|
if (sym)
|
||||||
return sym;
|
return sym;
|
||||||
|
|
|
@ -47,6 +47,9 @@ struct using_direct
|
||||||
char *import_src;
|
char *import_src;
|
||||||
char *import_dest;
|
char *import_dest;
|
||||||
struct using_direct *next;
|
struct using_direct *next;
|
||||||
|
|
||||||
|
/* Used during import search to temporarily mark this node as searched. */
|
||||||
|
int searched;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -107,7 +110,8 @@ extern struct symbol *cp_lookup_symbol_namespace (const char *namespace,
|
||||||
const char *name,
|
const char *name,
|
||||||
const char *linkage_name,
|
const char *linkage_name,
|
||||||
const struct block *block,
|
const struct block *block,
|
||||||
const domain_enum domain);
|
const domain_enum domain,
|
||||||
|
const int search_parents);
|
||||||
|
|
||||||
extern struct type *cp_lookup_nested_type (struct type *parent_type,
|
extern struct type *cp_lookup_nested_type (struct type *parent_type,
|
||||||
const char *nested_name,
|
const char *nested_name,
|
||||||
|
|
|
@ -1,3 +1,12 @@
|
||||||
|
2010-01-14 Sami Wagiaalla <swagiaal@redhat.com>
|
||||||
|
|
||||||
|
* gdb.cp/nsrecurs.exp: New test.
|
||||||
|
* gdb.cp/nsrecurs.cc: New test program.
|
||||||
|
* gdb.cp/nsstress.exp: New test.
|
||||||
|
* gdb.cp/nsstress.cc: New test program.
|
||||||
|
* gdb.cp/nsdecl.exp: New test.
|
||||||
|
* gdb.cp/nsdecl.cc: New test program.
|
||||||
|
|
||||||
2010-01-26 Sami Wagiaalla <swagiaal@redhat.com>
|
2010-01-26 Sami Wagiaalla <swagiaal@redhat.com>
|
||||||
|
|
||||||
* gdb.cp/namespace-using.exp: Add test for printing of namespaces
|
* gdb.cp/namespace-using.exp: Add test for printing of namespaces
|
||||||
|
|
93
gdb/testsuite/gdb.cp/nsdecl.cc
Normal file
93
gdb/testsuite/gdb.cp/nsdecl.cc
Normal file
|
@ -0,0 +1,93 @@
|
||||||
|
int a;
|
||||||
|
int b;
|
||||||
|
int c;
|
||||||
|
int d;
|
||||||
|
int e;
|
||||||
|
int f;
|
||||||
|
int g;
|
||||||
|
int h;
|
||||||
|
int i;
|
||||||
|
int j;
|
||||||
|
int k;
|
||||||
|
int l;
|
||||||
|
int m;
|
||||||
|
int n;
|
||||||
|
int o;
|
||||||
|
int p;
|
||||||
|
int q;
|
||||||
|
int r;
|
||||||
|
int s;
|
||||||
|
int t;
|
||||||
|
int u;
|
||||||
|
int v;
|
||||||
|
int w;
|
||||||
|
int x;
|
||||||
|
int y;
|
||||||
|
int z;
|
||||||
|
|
||||||
|
namespace A
|
||||||
|
{
|
||||||
|
int xyz;
|
||||||
|
|
||||||
|
using ::a;
|
||||||
|
using ::b;
|
||||||
|
using ::c;
|
||||||
|
using ::d;
|
||||||
|
using ::e;
|
||||||
|
using ::f;
|
||||||
|
using ::g;
|
||||||
|
using ::h;
|
||||||
|
using ::i;
|
||||||
|
using ::j;
|
||||||
|
using ::k;
|
||||||
|
using ::l;
|
||||||
|
using ::m;
|
||||||
|
using ::n;
|
||||||
|
using ::o;
|
||||||
|
using ::p;
|
||||||
|
using ::q;
|
||||||
|
using ::r;
|
||||||
|
using ::s;
|
||||||
|
using ::t;
|
||||||
|
using ::u;
|
||||||
|
using ::v;
|
||||||
|
using ::w;
|
||||||
|
using ::x;
|
||||||
|
using ::y;
|
||||||
|
using ::z;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
using A::a;
|
||||||
|
using A::b;
|
||||||
|
using A::c;
|
||||||
|
using A::d;
|
||||||
|
using A::e;
|
||||||
|
using A::f;
|
||||||
|
using A::g;
|
||||||
|
using A::h;
|
||||||
|
using A::i;
|
||||||
|
using A::j;
|
||||||
|
using A::k;
|
||||||
|
using A::l;
|
||||||
|
using A::m;
|
||||||
|
using A::n;
|
||||||
|
using A::o;
|
||||||
|
using A::p;
|
||||||
|
using A::q;
|
||||||
|
using A::r;
|
||||||
|
using A::s;
|
||||||
|
using A::t;
|
||||||
|
using A::u;
|
||||||
|
using A::v;
|
||||||
|
using A::w;
|
||||||
|
using A::x;
|
||||||
|
using A::y;
|
||||||
|
using A::z;
|
||||||
|
|
||||||
|
using namespace A;
|
||||||
|
|
||||||
|
int main ()
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
52
gdb/testsuite/gdb.cp/nsdecl.exp
Normal file
52
gdb/testsuite/gdb.cp/nsdecl.exp
Normal file
|
@ -0,0 +1,52 @@
|
||||||
|
# Copyright 2008 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
# This program is free software; you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation; either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
# Stress test the lookup of declarations
|
||||||
|
|
||||||
|
if $tracelevel then {
|
||||||
|
strace $tracelevel
|
||||||
|
}
|
||||||
|
|
||||||
|
set prms_id 0
|
||||||
|
set bug_id 0
|
||||||
|
|
||||||
|
set testfile nsdecl
|
||||||
|
set srcfile ${testfile}.cc
|
||||||
|
set binfile ${objdir}/${subdir}/${testfile}
|
||||||
|
if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug c++}] != "" } {
|
||||||
|
untested "Couldn't compile test program"
|
||||||
|
return -1
|
||||||
|
}
|
||||||
|
|
||||||
|
if [get_compiler_info ${binfile}] {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
# Get things started.
|
||||||
|
|
||||||
|
gdb_exit
|
||||||
|
gdb_start
|
||||||
|
gdb_reinitialize_dir $srcdir/$subdir
|
||||||
|
gdb_load ${binfile}
|
||||||
|
|
||||||
|
if ![runto_main] then {
|
||||||
|
perror "couldn't run to breakpoint main"
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
############################################
|
||||||
|
# Test that the search can fail efficiently
|
||||||
|
|
||||||
|
gdb_test "print fakex" "No symbol \"fakex\" in current context."
|
30
gdb/testsuite/gdb.cp/nsrecurs.cc
Normal file
30
gdb/testsuite/gdb.cp/nsrecurs.cc
Normal file
|
@ -0,0 +1,30 @@
|
||||||
|
namespace A{
|
||||||
|
int ax = 9;
|
||||||
|
}
|
||||||
|
|
||||||
|
namespace B{
|
||||||
|
using namespace A;
|
||||||
|
}
|
||||||
|
|
||||||
|
namespace C{
|
||||||
|
using namespace B;
|
||||||
|
}
|
||||||
|
|
||||||
|
//---------------
|
||||||
|
namespace D{
|
||||||
|
using namespace D;
|
||||||
|
int dx = 99;
|
||||||
|
}
|
||||||
|
using namespace C;
|
||||||
|
|
||||||
|
//---------------
|
||||||
|
namespace{
|
||||||
|
namespace{
|
||||||
|
int xx = 999;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(){
|
||||||
|
using namespace D;
|
||||||
|
return ax + dx + xx;
|
||||||
|
}
|
67
gdb/testsuite/gdb.cp/nsrecurs.exp
Normal file
67
gdb/testsuite/gdb.cp/nsrecurs.exp
Normal file
|
@ -0,0 +1,67 @@
|
||||||
|
# Copyright 2008 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
# This program is free software; you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation; either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
# Test recursive namespace lookup
|
||||||
|
|
||||||
|
if $tracelevel then {
|
||||||
|
strace $tracelevel
|
||||||
|
}
|
||||||
|
|
||||||
|
set prms_id 0
|
||||||
|
set bug_id 0
|
||||||
|
|
||||||
|
set testfile nsrecurs
|
||||||
|
set srcfile ${testfile}.cc
|
||||||
|
set binfile ${objdir}/${subdir}/${testfile}
|
||||||
|
if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug c++}] != "" } {
|
||||||
|
untested "Couldn't compile test program"
|
||||||
|
return -1
|
||||||
|
}
|
||||||
|
|
||||||
|
if [get_compiler_info ${binfile}] {
|
||||||
|
return -1
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
# Get things started.
|
||||||
|
|
||||||
|
gdb_exit
|
||||||
|
gdb_start
|
||||||
|
gdb_reinitialize_dir $srcdir/$subdir
|
||||||
|
gdb_load ${binfile}
|
||||||
|
|
||||||
|
if ![runto_main] then {
|
||||||
|
perror "couldn't run to breakpoint main"
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
############################################
|
||||||
|
# test printing from namespace imported into
|
||||||
|
# imported namespace
|
||||||
|
|
||||||
|
gdb_test "print ax" "= 9"
|
||||||
|
|
||||||
|
############################################
|
||||||
|
# test that gdb can print without falling
|
||||||
|
# into search loop
|
||||||
|
|
||||||
|
gdb_test "print dx" "= 99"
|
||||||
|
|
||||||
|
############################################
|
||||||
|
# test printing from namespace imported into
|
||||||
|
# imported namespace where imports are implicit
|
||||||
|
# anonymous namespace imports.
|
||||||
|
|
||||||
|
gdb_test "print xx" "= 999"
|
60
gdb/testsuite/gdb.cp/nsstress.cc
Normal file
60
gdb/testsuite/gdb.cp/nsstress.cc
Normal file
|
@ -0,0 +1,60 @@
|
||||||
|
|
||||||
|
namespace A{ int x; }
|
||||||
|
namespace B{ int x; }
|
||||||
|
namespace C{ int x; }
|
||||||
|
namespace D{ int x; }
|
||||||
|
namespace E{ int x; }
|
||||||
|
namespace F{ int x; }
|
||||||
|
namespace G{ int x; }
|
||||||
|
namespace H{ int x; }
|
||||||
|
namespace I{ int x; }
|
||||||
|
namespace J{ int x; }
|
||||||
|
namespace K{ int x; }
|
||||||
|
namespace L{ int x; }
|
||||||
|
namespace M{ int x; }
|
||||||
|
namespace N{ int x; }
|
||||||
|
namespace O{ int x; }
|
||||||
|
namespace P{ int x; }
|
||||||
|
namespace Q{ int x; }
|
||||||
|
namespace R{ int x; }
|
||||||
|
namespace S{ int x; }
|
||||||
|
namespace T{ int x; }
|
||||||
|
namespace U{ int x; }
|
||||||
|
namespace V{ int x; }
|
||||||
|
namespace W{ int x; }
|
||||||
|
namespace X{ int x; }
|
||||||
|
namespace Y{ int x; }
|
||||||
|
namespace Z{ int x; }
|
||||||
|
|
||||||
|
|
||||||
|
int main(){
|
||||||
|
|
||||||
|
using namespace A;
|
||||||
|
using namespace B;
|
||||||
|
using namespace C;
|
||||||
|
using namespace D;
|
||||||
|
using namespace E;
|
||||||
|
using namespace F;
|
||||||
|
using namespace G;
|
||||||
|
using namespace H;
|
||||||
|
using namespace I;
|
||||||
|
using namespace J;
|
||||||
|
using namespace K;
|
||||||
|
using namespace L;
|
||||||
|
using namespace M;
|
||||||
|
using namespace N;
|
||||||
|
using namespace O;
|
||||||
|
using namespace P;
|
||||||
|
using namespace Q;
|
||||||
|
using namespace R;
|
||||||
|
using namespace S;
|
||||||
|
using namespace T;
|
||||||
|
using namespace U;
|
||||||
|
using namespace V;
|
||||||
|
using namespace W;
|
||||||
|
using namespace X;
|
||||||
|
using namespace Y;
|
||||||
|
using namespace Z;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
52
gdb/testsuite/gdb.cp/nsstress.exp
Normal file
52
gdb/testsuite/gdb.cp/nsstress.exp
Normal file
|
@ -0,0 +1,52 @@
|
||||||
|
# Copyright 2008 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
# This program is free software; you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation; either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
# Stress test namespace lookup
|
||||||
|
|
||||||
|
if $tracelevel then {
|
||||||
|
strace $tracelevel
|
||||||
|
}
|
||||||
|
|
||||||
|
set prms_id 0
|
||||||
|
set bug_id 0
|
||||||
|
|
||||||
|
set testfile nsstress
|
||||||
|
set srcfile ${testfile}.cc
|
||||||
|
set binfile ${objdir}/${subdir}/${testfile}
|
||||||
|
if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug c++}] != "" } {
|
||||||
|
untested "Couldn't compile test program"
|
||||||
|
return -1
|
||||||
|
}
|
||||||
|
|
||||||
|
if [get_compiler_info ${binfile}] {
|
||||||
|
return -1
|
||||||
|
}
|
||||||
|
|
||||||
|
# Get things started.
|
||||||
|
|
||||||
|
gdb_exit
|
||||||
|
gdb_start
|
||||||
|
gdb_reinitialize_dir $srcdir/$subdir
|
||||||
|
gdb_load ${binfile}
|
||||||
|
|
||||||
|
if ![runto_main] then {
|
||||||
|
perror "couldn't run to breakpoint main"
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
############################################
|
||||||
|
# Test that the search can fail efficiently
|
||||||
|
|
||||||
|
gdb_test "print y" "No symbol \"y\" in current context."
|
|
@ -3098,7 +3098,7 @@ value_maybe_namespace_elt (const struct type *curtype,
|
||||||
|
|
||||||
sym = cp_lookup_symbol_namespace (namespace_name, name, NULL,
|
sym = cp_lookup_symbol_namespace (namespace_name, name, NULL,
|
||||||
get_selected_block (0),
|
get_selected_block (0),
|
||||||
VAR_DOMAIN);
|
VAR_DOMAIN, 1);
|
||||||
|
|
||||||
if (sym == NULL)
|
if (sym == NULL)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue