public inbox for gdb-patches@sourceware.org
 help / color / mirror / Atom feed
From: Keith Seitz <keiths@redhat.com>
To: Tom Tromey <tromey@redhat.com>
Cc: gdb-patches@sourceware.org
Subject: Re: [RFA] c++/11734 revisited
Date: Tue, 14 Dec 2010 20:03:00 -0000	[thread overview]
Message-ID: <4D07CD68.5000700@redhat.com> (raw)
In-Reply-To: <m3oc8u1uzs.fsf@fleche.redhat.com>

[-- Attachment #1: Type: text/plain, Size: 3186 bytes --]

On 12/09/2010 01:44 PM, Tom Tromey wrote:
>>>>>> "Keith" == Keith Seitz<keiths@redhat.com>  writes:

> I don't think this problem would affect psymtab.c.  So, you could
> probably still use pre-expansion if you think that is better.

I don't think it really matters. This patch seems simple enough to 
understand, and it works. I prefer to err on the side of least invasive. 
I fear that pre-expansion might have unforeseen consequences. I don't 
really need another dwarf2_physname! :-)

> Keith>  It's such a nightmare, it would actually a primary reason to
> Keith>  rewrite linespec.c entirely. One of these days, I'll find the
> Keith>  time to do it.
>
> That will be a happy day.  For us anyway ;-)

Or for me, since I seem to keep ending up dealing with problems in 
decode_line_1/decode_compound!


> The ChangeLog entry should mention the PR, so the commit will end up in
> bugzilla.

Yes, of course. I completely forgot. Fixed.

> For overlapping copies you must use memmove.

Fixed.

> I guess the search language could be a parameter.  I realize that at
> some point we'll need to use current_language, and that symtab.c isn't
> exactly clean in this regard.  It doesn't seem too hard to avoid letting
> the rot creep into this code, though.

I've added this parameter and pushed the language setting up a level 
into symtab.c.

> The return type of this function should be just "char *".
> Otherwise you will need casts when freeing.

Okay.

> I don't know if you can use prepare_for_testing here, but
> if not you can at least use clean_restart.

I've switched to prepare_for_testing, as I mentioned in my follow-up to 
Jan's message.

Revised patch attached.

Keith

ChangeLog
2010-12-14  Keith Seitz  <keiths@redhat.com>

	PR c++/11734
	* linespec.c (decode_compound): Rename SAVED_ARG to
	THE_REAL_SAVED_ARG.
	Make a copy of THE_REAL_SAVED_ARG in SAVED_ARG and strip
	single-quotes.

	* psymtab.c (lookup_partial_symbol): Add language parameter.
	(lookup_symbol_aux_psymtabs): Likewise.
	Don't assume that the psymtab we found was the right one. Search
	for the desired symbol in the symtab to be certain.
	(psymtab_search_name): New function.
	(lookup_partial_symbol): Use psymtab_search_name.
	Add language parameter.
	(read_symtabs_for_function): Add language parameter and pass to
	lookup_partial_symbol.
	(find_symbol_file_from_partial): Likewise.
	* symfile.h (struct quick_symbol_functions): Add language parameter
	to lookup_symbol, expand_symtabs_for_function, and find_symbol_file.
	* cp-support.c (make_symbol_overload_list): Update above API
	changes.
	* symtab.c (lookup_symbol_aux_quick): Pass the current language
	to the quick symbol functions.
	(basic_lookup_transparent_type_quick): Likewise.
	(find_main_filename): Likewise.
	* dwarf2_read.c (dw2_lookup_symbol): Add langauge parameter.
	(dw2_expand_symtabs_for_function): Likewise.
	(dw2_find_symbol_file): Likewise.

testsuite/ChangeLog
2010-12-14  Keith Seitz  <keiths@redhat.com>

	PR c++/11734
	* gdb.cp/pr11734.exp: New test.
	* gdb.cp/pr11734.h: New file.
	* gdb.cp/pr11734-1.cc: New file.
	* gdb.cp/pr11734-2.cc: New file.
	* gdb.cp/pr11734-3.cc: New file.
	* gdb.cp/pr11734-4.cc: New file.

[-- Attachment #2: pr11734-5.patch --]
[-- Type: text/plain, Size: 22326 bytes --]

Index: cp-support.c
===================================================================
RCS file: /cvs/src/src/gdb/cp-support.c,v
retrieving revision 1.44
diff -u -p -r1.44 cp-support.c
--- cp-support.c	25 Jun 2010 16:16:44 -0000	1.44
+++ cp-support.c	14 Dec 2010 19:43:50 -0000
@@ -35,6 +35,7 @@
 #include "exceptions.h"
 #include "expression.h"
 #include "value.h"
+#include "language.h"
 
 #include "safe-ctype.h"
 
@@ -917,7 +918,8 @@ make_symbol_overload_list_qualified (con
   ALL_OBJFILES (objfile)
   {
     if (objfile->sf)
-      objfile->sf->qf->expand_symtabs_for_function (objfile, func_name);
+      objfile->sf->qf->expand_symtabs_for_function (objfile, func_name,
+						    language_cplus);
   }
 
   /* Search upwards from currently selected frame (so that we can
Index: dwarf2read.c
===================================================================
RCS file: /cvs/src/src/gdb/dwarf2read.c,v
retrieving revision 1.489
diff -u -p -r1.489 dwarf2read.c
--- dwarf2read.c	12 Dec 2010 19:19:27 -0000	1.489
+++ dwarf2read.c	14 Dec 2010 19:43:53 -0000
@@ -2334,7 +2334,8 @@ dw2_lookup_symtab (struct objfile *objfi
 
 static struct symtab *
 dw2_lookup_symbol (struct objfile *objfile, int block_index,
-		   const char *name, domain_enum domain)
+		   const char *name, domain_enum domain,
+		   enum language language)
 {
   /* We do all the work in the pre_expand_symtabs_matching hook
      instead.  */
@@ -2410,7 +2411,8 @@ dw2_relocate (struct objfile *objfile, s
 
 static void
 dw2_expand_symtabs_for_function (struct objfile *objfile,
-				 const char *func_name)
+				 const char *func_name,
+				 enum language language)
 {
   dw2_do_expand_symtabs_matching (objfile, func_name);
 }
@@ -2470,7 +2472,8 @@ dw2_expand_symtabs_with_filename (struct
 }
 
 static const char *
-dw2_find_symbol_file (struct objfile *objfile, const char *name)
+dw2_find_symbol_file (struct objfile *objfile, const char *name,
+		      enum language language)
 {
   struct dwarf2_per_cu_data *per_cu;
   offset_type *vec;
Index: linespec.c
===================================================================
RCS file: /cvs/src/src/gdb/linespec.c,v
retrieving revision 1.105
diff -u -p -r1.105 linespec.c
--- linespec.c	2 Dec 2010 20:05:59 -0000	1.105
+++ linespec.c	14 Dec 2010 19:43:54 -0000
@@ -1219,7 +1219,7 @@ decode_objc (char **argptr, int funfirst
 
 static struct symtabs_and_lines
 decode_compound (char **argptr, int funfirstline, char ***canonical,
-		 char *saved_arg, char *p, int *not_found_ptr)
+		 char *the_real_saved_arg, char *p, int *not_found_ptr)
 {
   struct symtabs_and_lines values;
   char *p2;
@@ -1230,7 +1230,23 @@ decode_compound (char **argptr, int funf
   struct symbol *sym_class;
   struct type *t;
   char *saved_java_argptr = NULL;
+  char *saved_arg;
 
+  /* THE_REAL_SAVED_ARG cannot be altered, so make a copy that can be.  */
+  saved_arg = alloca (strlen (the_real_saved_arg) + 1);
+  strcpy (saved_arg, the_real_saved_arg);
+
+  /* If the user specified "'foo::bar(baz)'" (note the quotes -- often
+     added to workaround completer issues) -- saved_arg will be
+     encapsulated in single-quotes.  They are superfluous, so just strip
+     them off.  */
+  if (*saved_arg == '\'')
+    {
+      char *end = skip_quoted (saved_arg);
+      memmove (saved_arg, saved_arg + 1, end - saved_arg);
+      memmove (end - 2, end, strlen (saved_arg) + 1);
+    }
+      
   /* First check for "global" namespace specification, of the form
      "::foo".  If found, skip over the colons and jump to normal
      symbol processing.  I.e. the whole line specification starts with
@@ -1481,7 +1497,7 @@ decode_compound (char **argptr, int funf
      up.  The quotes are important if copy is empty.  */
   if (not_found_ptr)
     *not_found_ptr = 1;
-  cplusplus_error (saved_arg,
+  cplusplus_error (the_real_saved_arg,
 		   "Can't find member of namespace, class, struct, or union named \"%s\"\n",
 		   copy);
 }
Index: psymtab.c
===================================================================
RCS file: /cvs/src/src/gdb/psymtab.c,v
retrieving revision 1.19
diff -u -p -r1.19 psymtab.c
--- psymtab.c	24 Nov 2010 19:01:51 -0000	1.19
+++ psymtab.c	14 Dec 2010 19:43:54 -0000
@@ -33,6 +33,8 @@
 #include "readline/readline.h"
 #include "gdb_regex.h"
 #include "dictionary.h"
+#include "language.h"
+#include "cp-support.h"
 
 #ifndef DEV_TTY
 #define DEV_TTY "/dev/tty"
@@ -55,7 +57,8 @@ static struct partial_symbol *match_part
 
 static struct partial_symbol *lookup_partial_symbol (struct partial_symtab *,
 						     const char *, int,
-						     domain_enum);
+						     domain_enum,
+						     enum language);
 
 static char *psymtab_to_fullname (struct partial_symtab *ps);
 
@@ -418,15 +421,35 @@ fixup_psymbol_section (struct partial_sy
 static struct symtab *
 lookup_symbol_aux_psymtabs (struct objfile *objfile,
 			    int block_index, const char *name,
-			    const domain_enum domain)
+			    const domain_enum domain, enum language language)
 {
   struct partial_symtab *ps;
   const int psymtab_index = (block_index == GLOBAL_BLOCK ? 1 : 0);
 
   ALL_OBJFILE_PSYMTABS (objfile, ps)
   {
-    if (!ps->readin && lookup_partial_symbol (ps, name, psymtab_index, domain))
-      return PSYMTAB_TO_SYMTAB (ps);
+    if (!ps->readin
+	&& lookup_partial_symbol (ps, name, psymtab_index, domain, language))
+      {
+	struct symbol *sym;
+	struct symtab *stab = PSYMTAB_TO_SYMTAB (ps);
+	sym = NULL;
+
+	/* Some caution must be observed with overloaded functions
+	   and methods, since the psymtab will not contain any overload
+	   information (but NAME might contain it).  */
+	if (stab->primary)
+	  {
+	    struct blockvector *bv = BLOCKVECTOR (stab);
+	    struct block *block = BLOCKVECTOR_BLOCK (bv, block_index);
+	    sym = lookup_block_symbol (block, name, domain);
+	  }
+
+	if (sym && strcmp_iw (SYMBOL_SEARCH_NAME (sym), name) == 0)
+	  return stab;
+
+	/* Keep looking through other psymtabs.  */
+      }
   }
 
   return NULL;
@@ -519,22 +542,58 @@ pre_expand_symtabs_matching_psymtabs (st
   /* Nothing.  */
 }
 
+/* Returns the name used to search psymtabs.  Unlike symtabs, psymtabs do
+   not contain any method/function instance information (since this would
+   force reading type information while reading psymtabs).  Therefore,
+   if NAME contains overload information, it must be stripped before searching
+   psymtabs.
+
+   The caller is responsible for freeing the return result.  */
+
+static const char *
+psymtab_search_name (const char *name, enum language language)
+{
+  switch (language)
+    {
+    case language_cplus:
+    case language_java:
+      {
+       if (strchr (name, '('))
+         {
+           char *ret = cp_remove_params (name);
+           if (ret)
+             return ret;
+         }
+      }
+
+    default:
+      break;
+    }
+
+  return xstrdup (name);
+}
+
 /* Look, in partial_symtab PST, for symbol whose natural name is NAME.
    Check the global symbols if GLOBAL, the static symbols if not.  */
 
 static struct partial_symbol *
 lookup_partial_symbol (struct partial_symtab *pst, const char *name,
-		       int global, domain_enum domain)
+		       int global, domain_enum domain, enum language language)
 {
   struct partial_symbol **start, **psym;
   struct partial_symbol **top, **real_top, **bottom, **center;
   int length = (global ? pst->n_global_syms : pst->n_static_syms);
   int do_linear_search = 1;
+  const char *search_name;
+  struct cleanup *cleanup;
 
   if (length == 0)
     {
       return (NULL);
     }
+
+  search_name = psymtab_search_name (name, language);
+  cleanup = make_cleanup (xfree, (void *) search_name);
   start = (global ?
 	   pst->objfile->global_psymbols.list + pst->globals_offset :
 	   pst->objfile->static_psymbols.list + pst->statics_offset);
@@ -562,7 +621,8 @@ lookup_partial_symbol (struct partial_sy
 	    {
 	      do_linear_search = 1;
 	    }
-	  if (strcmp_iw_ordered (SYMBOL_SEARCH_NAME (*center), name) >= 0)
+	  if (strcmp_iw_ordered (SYMBOL_SEARCH_NAME (*center),
+				 search_name) >= 0)
 	    {
 	      top = center;
 	    }
@@ -575,11 +635,14 @@ lookup_partial_symbol (struct partial_sy
 	internal_error (__FILE__, __LINE__, _("failed internal consistency check"));
 
       while (top <= real_top
-	     && SYMBOL_MATCHES_SEARCH_NAME (*top, name))
+	     && SYMBOL_MATCHES_SEARCH_NAME (*top, search_name))
 	{
 	  if (symbol_matches_domain (SYMBOL_LANGUAGE (*top),
 				     SYMBOL_DOMAIN (*top), domain))
-	    return (*top);
+	    {
+	      do_cleanups (cleanup);
+	      return (*top);
+	    }
 	  top++;
 	}
     }
@@ -594,10 +657,14 @@ lookup_partial_symbol (struct partial_sy
 	  if (symbol_matches_domain (SYMBOL_LANGUAGE (*psym),
 				     SYMBOL_DOMAIN (*psym), domain)
 	      && SYMBOL_MATCHES_SEARCH_NAME (*psym, name))
-	    return (*psym);
+	    {
+	      do_cleanups (cleanup);
+	      return (*psym);
+	    }
 	}
     }
 
+  do_cleanups (cleanup);
   return (NULL);
 }
 
@@ -909,7 +976,8 @@ dump_psymtabs_for_objfile (struct objfil
    by matching FUNC_NAME.  Make sure we read that symbol table in. */
 
 static void
-read_symtabs_for_function (struct objfile *objfile, const char *func_name)
+read_symtabs_for_function (struct objfile *objfile, const char *func_name,
+			   enum language language)
 {
   struct partial_symtab *ps;
 
@@ -918,9 +986,9 @@ read_symtabs_for_function (struct objfil
     if (ps->readin)
       continue;
 
-    if ((lookup_partial_symbol (ps, func_name, 1, VAR_DOMAIN)
+    if ((lookup_partial_symbol (ps, func_name, 1, VAR_DOMAIN, language)
 	 != NULL)
-	|| (lookup_partial_symbol (ps, func_name, 0, VAR_DOMAIN)
+	|| (lookup_partial_symbol (ps, func_name, 0, VAR_DOMAIN, language)
 	    != NULL))
       psymtab_to_symtab (ps);
   }
@@ -1040,13 +1108,14 @@ psymtab_to_fullname (struct partial_symt
 }
 
 static const char *
-find_symbol_file_from_partial (struct objfile *objfile, const char *name)
+find_symbol_file_from_partial (struct objfile *objfile, const char *name,
+			       enum language language)
 {
   struct partial_symtab *pst;
 
   ALL_OBJFILE_PSYMTABS (objfile, pst)
     {
-      if (lookup_partial_symbol (pst, name, 1, VAR_DOMAIN))
+      if (lookup_partial_symbol (pst, name, 1, VAR_DOMAIN, language))
 	return pst->filename;
     }
   return NULL;
Index: symfile.h
===================================================================
RCS file: /cvs/src/src/gdb/symfile.h,v
retrieving revision 1.80
diff -u -p -r1.80 symfile.h
--- symfile.h	9 Dec 2010 19:52:23 -0000	1.80
+++ symfile.h	14 Dec 2010 19:43:54 -0000
@@ -167,14 +167,15 @@ struct quick_symbol_functions
   /* Check to see if the symbol is defined in a "partial" symbol table
      of OBJFILE.  KIND should be either GLOBAL_BLOCK or STATIC_BLOCK,
      depending on whether we want to search global symbols or static
-     symbols.  NAME is the name of the symbol to look for.  DOMAIN
-     indicates what sort of symbol to search for.
+     symbols.  NAME (valid in LANGUAGE) is the name of the symbol to look for.
+     DOMAIN indicates what sort of symbol to search for.
 
      Returns the newly-expanded symbol table in which the symbol is
      defined, or NULL if no such symbol table exists.  */
   struct symtab *(*lookup_symbol) (struct objfile *objfile,
 				   int kind, const char *name,
-				   domain_enum domain);
+				   domain_enum domain,
+				   enum language language);
 
   /* This is called to expand symbol tables before looking up a
      symbol.  A backend can choose to implement this and then have its
@@ -200,10 +201,11 @@ struct quick_symbol_functions
 		    struct section_offsets *new_offsets,
 		    struct section_offsets *delta);
 
-  /* Find all the symbols in OBJFILE named FUNC_NAME, and ensure that
-     the corresponding symbol tables are loaded.  */
+  /* Find all the symbols in OBJFILE named FUNC_NAME (valid in LANGUAGE),
+     and ensure that the corresponding symbol tables are loaded.  */
   void (*expand_symtabs_for_function) (struct objfile *objfile,
-				       const char *func_name);
+				       const char *func_name,
+				       enum language language);
 
   /* Read all symbol tables associated with OBJFILE.  */
   void (*expand_all_symtabs) (struct objfile *objfile);
@@ -217,8 +219,10 @@ struct quick_symbol_functions
 					const char *filename);
 
   /* Return the file name of the file holding the symbol in OBJFILE
-     named NAME.  If no such symbol exists in OBJFILE, return NULL.  */
-  const char *(*find_symbol_file) (struct objfile *objfile, const char *name);
+     named NAME (valid in LANGUAGE).  If no such symbol exists in OBJFILE,
+     return NULL.  */
+  const char *(*find_symbol_file) (struct objfile *objfile, const char *name,
+				   enum language language);
 
   /* Find global or static symbols in all tables that are in NAMESPACE 
      and for which MATCH (symbol name, NAME) == 0, passing each to 
Index: symtab.c
===================================================================
RCS file: /cvs/src/src/gdb/symtab.c,v
retrieving revision 1.254
diff -u -p -r1.254 symtab.c
--- symtab.c	17 Oct 2010 18:49:46 -0000	1.254
+++ symtab.c	14 Dec 2010 19:43:55 -0000
@@ -1380,7 +1380,8 @@ lookup_symbol_aux_quick (struct objfile 
 
   if (!objfile->sf)
     return NULL;
-  symtab = objfile->sf->qf->lookup_symbol (objfile, kind, name, domain);
+  symtab = objfile->sf->qf->lookup_symbol (objfile, kind, name, domain,
+					   current_language->la_language);
   if (!symtab)
     return NULL;
 
@@ -1551,7 +1552,8 @@ basic_lookup_transparent_type_quick (str
 
   if (!objfile->sf)
     return NULL;
-  symtab = objfile->sf->qf->lookup_symbol (objfile, kind, name, STRUCT_DOMAIN);
+  symtab = objfile->sf->qf->lookup_symbol (objfile, kind, name, STRUCT_DOMAIN,
+					   current_language->la_language);
   if (!symtab)
     return NULL;
 
@@ -1683,7 +1685,8 @@ find_main_filename (void)
 
     if (!objfile->sf)
       continue;
-    result = objfile->sf->qf->find_symbol_file (objfile, name);
+    result = objfile->sf->qf->find_symbol_file (objfile, name,
+						current_language->la_language);
     if (result)
       return result;
   }
Index: testsuite/gdb.cp/pr11734-1.cc
===================================================================
RCS file: testsuite/gdb.cp/pr11734-1.cc
diff -N testsuite/gdb.cp/pr11734-1.cc
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ testsuite/gdb.cp/pr11734-1.cc	14 Dec 2010 19:43:56 -0000
@@ -0,0 +1,30 @@
+/* This testcase is part of GDB, the GNU debugger.
+
+   Copyright 2010 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/>.
+
+   Please email any bugs, comments, and/or additions to this file to:
+   bug-gdb@gnu.org  */
+
+#include "pr11734.h"
+
+int
+main ()
+{
+  pr11734 *p = new pr11734;
+  p->foo ();
+  return 0;
+}
+
Index: testsuite/gdb.cp/pr11734-2.cc
===================================================================
RCS file: testsuite/gdb.cp/pr11734-2.cc
diff -N testsuite/gdb.cp/pr11734-2.cc
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ testsuite/gdb.cp/pr11734-2.cc	14 Dec 2010 19:43:56 -0000
@@ -0,0 +1,27 @@
+/* This testcase is part of GDB, the GNU debugger.
+
+   Copyright 2010 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/>.
+
+   Please email any bugs, comments, and/or additions to this file to:
+   bug-gdb@gnu.org  */
+
+#include "pr11734.h"
+
+void
+pr11734::foo(void)
+{
+}
+
Index: testsuite/gdb.cp/pr11734-3.cc
===================================================================
RCS file: testsuite/gdb.cp/pr11734-3.cc
diff -N testsuite/gdb.cp/pr11734-3.cc
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ testsuite/gdb.cp/pr11734-3.cc	14 Dec 2010 19:43:56 -0000
@@ -0,0 +1,27 @@
+/* This testcase is part of GDB, the GNU debugger.
+
+   Copyright 2010 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/>.
+
+   Please email any bugs, comments, and/or additions to this file to:
+   bug-gdb@gnu.org  */
+
+#include "pr11734.h"
+
+void
+pr11734::foo (int a)
+{
+}
+
Index: testsuite/gdb.cp/pr11734-4.cc
===================================================================
RCS file: testsuite/gdb.cp/pr11734-4.cc
diff -N testsuite/gdb.cp/pr11734-4.cc
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ testsuite/gdb.cp/pr11734-4.cc	14 Dec 2010 19:43:56 -0000
@@ -0,0 +1,27 @@
+/* This testcase is part of GDB, the GNU debugger.
+
+   Copyright 2010 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/>.
+
+   Please email any bugs, comments, and/or additions to this file to:
+   bug-gdb@gnu.org  */
+
+#include "pr11734.h"
+
+void
+pr11734::foo (char *a)
+{
+}
+
Index: testsuite/gdb.cp/pr11734.exp
===================================================================
RCS file: testsuite/gdb.cp/pr11734.exp
diff -N testsuite/gdb.cp/pr11734.exp
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ testsuite/gdb.cp/pr11734.exp	14 Dec 2010 19:43:56 -0000
@@ -0,0 +1,55 @@
+# Copyright 2010 Free Software Foundation, Inc.
+#
+# Contributed by Red Hat, originally written by Keith Seitz.
+#
+# 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/>.
+
+# This file is part of the gdb testsuite.
+
+if { [skip_cplus_tests] } { continue }
+
+set testfile "pr11734"
+set class $testfile
+
+set srcfiles {}
+for {set i 1} {$i < 5} {incr i} {
+    lappend srcfiles $testfile-$i.cc
+}
+
+prepare_for_testing pr11734 $testfile $srcfiles {c++ debug}
+
+if {![runto_main]} {
+    perror "couldn't run to breakpoint"
+    continue
+}
+
+# An array holding the overload types for the method pr11734::foo.  The
+# first element is the overloaded method parameter.  The second element
+# is the expected source file number, e.g. "pr11734-?.cc".
+array set tests {
+    "char*"  4
+    "int"    3
+    ""       2
+}
+
+# Test each overload instance twice: once quoted, once unquoted
+foreach ovld [array names tests] {
+    set method "${class}::foo\($ovld\)"
+    set result "Breakpoint (\[0-9\]).*file .*/$class-$tests($ovld).*"
+    gdb_test "break $method" $result
+    gdb_test "break '$method'" $result
+}
+
+gdb_exit
+return 0
Index: testsuite/gdb.cp/pr11734.h
===================================================================
RCS file: testsuite/gdb.cp/pr11734.h
diff -N testsuite/gdb.cp/pr11734.h
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ testsuite/gdb.cp/pr11734.h	14 Dec 2010 19:43:56 -0000
@@ -0,0 +1,28 @@
+/* This testcase is part of GDB, the GNU debugger.
+
+   Copyright 2010 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/>.
+
+   Please email any bugs, comments, and/or additions to this file to:
+   bug-gdb@gnu.org  */
+
+class pr11734
+{
+ public:
+  void foo ();
+  void foo (int);
+  void foo (char *);
+};
+

  parent reply	other threads:[~2010-12-14 20:03 UTC|newest]

Thread overview: 29+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-12-09  0:50 Keith Seitz
2010-12-09  4:02 ` Eli Zaretskii
2010-12-09 21:45 ` Tom Tromey
2010-12-09 21:52   ` Jan Kratochvil
2010-12-10 15:21     ` Keith Seitz
2010-12-14 20:03   ` Keith Seitz [this message]
2011-01-24 18:15     ` Jan Kratochvil
2011-01-26 23:14       ` Jan Kratochvil
2011-02-06 22:04     ` Jan Kratochvil
2011-02-06 22:45     ` [patch 0/3] Re: [RFA] c++/11734 revisited (and c++/12273) Jan Kratochvil
2011-02-08 21:42       ` Tom Tromey
2011-02-10 21:45       ` Keith Seitz
2011-02-17 18:37         ` Keith Seitz
2011-02-18  3:24           ` Keith Seitz
2011-02-21 11:41           ` Jan Kratochvil
2011-02-24 20:41             ` Keith Seitz
2011-02-27 21:18             ` Jan Kratochvil
2011-03-01 22:00               ` Keith Seitz
2011-03-14  7:52                 ` Jan Kratochvil
2011-03-15 19:03                   ` Keith Seitz
2011-03-16  8:28                     ` Jan Kratochvil
2011-03-16 13:58                       ` Tom Tromey
2011-03-16 23:20                       ` Keith Seitz
2011-03-17  3:19                         ` Joel Brobecker
2011-03-17  9:11                           ` Jan Kratochvil
2011-03-17 13:21                             ` Joel Brobecker
2011-02-06 22:46     ` [patch 1/3] revert physname part (b) [Re: [RFA] c++/11734 revisited] Jan Kratochvil
2011-02-06 22:46     ` [patch 3/3] Various linespec fixups " Jan Kratochvil
2011-02-06 22:46     ` [patch 2/3] Keith's psymtabs fix " Jan Kratochvil

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4D07CD68.5000700@redhat.com \
    --to=keiths@redhat.com \
    --cc=gdb-patches@sourceware.org \
    --cc=tromey@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).