Browse Source
* cp-namespace.c (cp_lookup_symbol_in_namespace): Add SEARCH parameter and pass it to lookup_symbol_file. (cp_lookup_symbol_imports): Tell cp_lookup_symbol_in_namespace to search base classes. (cp_lookup_symbol_namespace): Likewise. (lookup_namespace_scope): Likewise. (lookup_symbol_file): Add SEARCH parameter. If SEARCH is non-zero and no symbol is found, lookup the class and call cp_lookup_nested_symbol. (find_symbol_in_baseclass): New function. (cp_lookup_nested_symbol): Do not let cp_lookup_symbol_in_namespace search through base classes. Do that later when there is no global symbol match. PR c++/13615 * gdb.cp/baseenum.cc: New file. * gdb.cp/baseenum.exp: New file. * gdb.cp/derivation.cc (A): Add copyright. Add a typedef. (B): Use A::value_type instead of int. Change all references. (D): Use value_type instead of int. Change all references. (E): Likewise. (F); Likewise. (Z): New class. (ZZ): New class. (N, Base, Derived): New namespace and classes. (main): Add instances of Z and ZZ. Make sure all symbols from N are kept. * gdb.cp/derivation.exp: Update typedef changes in tests. Add tests for class typedefs both before and after starting the inferior. Add tests for searching for a typedef while stopped in a method.gdb_7_6-branch
7 changed files with 457 additions and 69 deletions
@ -0,0 +1,81 @@ |
|||
/* This testcase is part of GDB, the GNU debugger.
|
|||
|
|||
Copyright 2003-2004, 2007-2012 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/>.
|
|||
*/ |
|||
|
|||
class A |
|||
{ |
|||
public: |
|||
enum E {X,Y,Z}; |
|||
}; |
|||
|
|||
class B1 : public A |
|||
{ |
|||
}; |
|||
|
|||
class B2 : public A |
|||
{ |
|||
}; |
|||
|
|||
class C : public B1, public B2 |
|||
{ |
|||
public: |
|||
void test(E e); |
|||
}; |
|||
|
|||
void C::test(E e) |
|||
{ |
|||
if (e == X) // breakpoint 1
|
|||
{ |
|||
} |
|||
} |
|||
|
|||
namespace N |
|||
{ |
|||
class A |
|||
{ |
|||
public: |
|||
enum E {X, Y, Z}; |
|||
}; |
|||
|
|||
class B1 {}; |
|||
class B2 : public A {}; |
|||
|
|||
class C : public B1, public B2 |
|||
{ |
|||
public: |
|||
void test (E e); |
|||
}; |
|||
|
|||
void |
|||
C::test (E e) |
|||
{ |
|||
if (e == X) // breakpoint 2
|
|||
{ |
|||
} |
|||
} |
|||
} |
|||
|
|||
int main() |
|||
{ |
|||
C c; |
|||
c.test(A::X); |
|||
|
|||
N::C nc; |
|||
nc.test (N::A::X); |
|||
return 0; |
|||
} |
|||
|
|||
@ -0,0 +1,36 @@ |
|||
# Copyright 2012 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 searching enum constant symbols derived from base classes. |
|||
|
|||
standard_testfile .cc |
|||
|
|||
if {[prepare_for_testing $testfile.exp $testfile $srcfile {debug c++}]} { |
|||
return -1 |
|||
} |
|||
|
|||
if {![runto_main]} { |
|||
untested "could not run to main" |
|||
return -1 |
|||
} |
|||
|
|||
gdb_breakpoint [gdb_get_line_number "breakpoint 1" $srcfile] |
|||
gdb_continue_to_breakpoint "breakpoint 1" |
|||
gdb_test "print X" "= A::X" "Print enum constant X of class A" |
|||
|
|||
gdb_breakpoint [gdb_get_line_number "breakpoint 2" $srcfile] |
|||
gdb_continue_to_breakpoint "breakpoint 2" |
|||
gdb_test "print X" "= N::A::X" \ |
|||
"Print enum constant X of class A in namespace N" |
|||
Loading…
Reference in new issue