PR symtab/17602

gdb/ChangeLog:

	PR symtab/17602
	* linespec.c (iterate_name_matcher): Fix arguments to symbol_name_cmp.

gdb/testsuite/ChangeLog:

        PR symtab/17602
	* gdb.cp/anon-ns.cc: Move guts of this file to ...
	* gdb.cp/anon-ns-2.cc: ... here.  New file.
	* gdb.cp/anon-ns.exp: Update.
This commit is contained in:
Doug Evans 2014-12-02 16:40:38 -08:00
parent 72998fb37a
commit 29f0c3b7b2
6 changed files with 113 additions and 70 deletions

View File

@ -1,3 +1,8 @@
2014-12-02 Doug Evans <dje@google.com>
PR symtab/17602
* linespec.c (iterate_name_matcher): Fix arguments to symbol_name_cmp.
2014-12-02 Doug Evans <dje@google.com>
PR symtab/17591

View File

@ -982,7 +982,12 @@ iterate_name_matcher (const char *name, void *d)
{
const struct symbol_matcher_data *data = d;
if (data->symbol_name_cmp (name, data->lookup_name) == 0)
/* The order of arguments we pass to symbol_name_cmp is important as
strcmp_iw, a typical value for symbol_name_cmp, only performs special
processing of '(' to remove overload info on the first argument and not
the second. The first argument is what the user provided, the second
argument is what came from partial syms / .gdb_index. */
if (data->symbol_name_cmp (data->lookup_name, name) == 0)
return 1; /* Expand this symbol's symbol table. */
return 0; /* Skip this symbol. */
}

View File

@ -1,3 +1,10 @@
2014-12-02 Doug Evans <dje@google.com>
PR symtab/17602
* gdb.cp/anon-ns.cc: Move guts of this file to ...
* gdb.cp/anon-ns-2.cc: ... here. New file.
* gdb.cp/anon-ns.exp: Update.
2014-12-02 Nick Bull <nicholaspbull@gmail.com>
* gdb.python/py-events.py (inferior_call_handler): New.

View File

@ -17,76 +17,11 @@
Contributed by Red Hat, originally written by Keith Seitz. */
#include <stdlib.h>
namespace
{
void doit1 (void) { } // doit1(void)
void doit1 (int a) { } // doit1(int)
void doit1 (char *a) { } // doit1(char *)
class one
{
public:
one (void) { } // one::one(void)
one (int a) { } // one::one(int)
one (char *a) { } // one::one(char *)
static void doit (void) { } // one::doit(void)
};
namespace A
{
void doit2 (void) { } // A::doit2(void)
void doit2 (int a) { } // A::doit2(int)
void doit2 (char *a) { } // A::doit2(char *)
class two
{
public:
two (void) { } // A::two::two(void)
two (int a) { } // A::two::two(int)
two (char *a) { } // A::two::two(char *)
static void doit (void) { } // A::two::doit(void)
};
namespace
{
namespace
{
void doit3 (void) { } // A::doit3(void)
void doit3 (int a) { } // A::doit3(int)
void doit3 (char *a) { } // A::doit3(char *)
class three
{
public:
three (void) { } // A::three::three(void)
three (int a) { } // A::three::three(int)
three (char *a) { } // A::three::three(char *)
static void doit (void) { } // A::three::doit(void)
};
}
}
}
}
extern void doit (void);
int
main (void)
{
one a, b (3), c (static_cast<char *> (NULL));
one::doit ();
A::two d, e (3), f (static_cast<char *> (NULL));
A::two::doit ();
A::three g, h (3), i (static_cast<char *> (NULL));
A::three::doit ();
doit1 ();
doit1 (3);
doit1 (static_cast<char *> (NULL));
A::doit2 ();
A::doit2 (3);
A::doit2 (static_cast<char *> (NULL));
A::doit3 ();
A::doit3 (3);
A::doit3 (static_cast<char *> (NULL));
doit ();
return 0;
}

View File

@ -19,9 +19,9 @@
if {[skip_cplus_tests]} { continue }
standard_testfile .cc
standard_testfile .cc anon-ns2.cc
if {[prepare_for_testing $testfile $testfile $srcfile {c++ debug}]} {
if {[prepare_for_testing $testfile $testfile "$srcfile $srcfile2" {c++ debug}]} {
return -1
}

View File

@ -0,0 +1,91 @@
/* This testcase is part of GDB, the GNU debugger.
Copyright 2011-2014 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/>.
Contributed by Red Hat, originally written by Keith Seitz. */
#include <stdlib.h>
namespace
{
void doit1 (void) { } // doit1(void)
void doit1 (int a) { } // doit1(int)
void doit1 (char *a) { } // doit1(char *)
class one
{
public:
one (void) { } // one::one(void)
one (int a) { } // one::one(int)
one (char *a) { } // one::one(char *)
static void doit (void) { } // one::doit(void)
};
namespace A
{
void doit2 (void) { } // A::doit2(void)
void doit2 (int a) { } // A::doit2(int)
void doit2 (char *a) { } // A::doit2(char *)
class two
{
public:
two (void) { } // A::two::two(void)
two (int a) { } // A::two::two(int)
two (char *a) { } // A::two::two(char *)
static void doit (void) { } // A::two::doit(void)
};
namespace
{
namespace
{
void doit3 (void) { } // A::doit3(void)
void doit3 (int a) { } // A::doit3(int)
void doit3 (char *a) { } // A::doit3(char *)
class three
{
public:
three (void) { } // A::three::three(void)
three (int a) { } // A::three::three(int)
three (char *a) { } // A::three::three(char *)
static void doit (void) { } // A::three::doit(void)
};
}
}
}
}
void
doit (void)
{
one a, b (3), c (static_cast<char *> (NULL));
one::doit ();
A::two d, e (3), f (static_cast<char *> (NULL));
A::two::doit ();
A::three g, h (3), i (static_cast<char *> (NULL));
A::three::doit ();
doit1 ();
doit1 (3);
doit1 (static_cast<char *> (NULL));
A::doit2 ();
A::doit2 (3);
A::doit2 (static_cast<char *> (NULL));
A::doit3 ();
A::doit3 (3);
A::doit3 (static_cast<char *> (NULL));
}