From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 18121 invoked by alias); 6 Jun 2011 21:20:14 -0000 Received: (qmail 18110 invoked by uid 22791); 6 Jun 2011 21:20:12 -0000 X-SWARE-Spam-Status: No, hits=-5.7 required=5.0 tests=AWL,BAYES_00,KAM_STOCKGEN,RCVD_IN_DNSWL_HI,SPF_HELO_PASS,T_RP_MATCHES_RCVD X-Spam-Check-By: sourceware.org Received: from mx1.redhat.com (HELO mx1.redhat.com) (209.132.183.28) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Mon, 06 Jun 2011 21:19:54 +0000 Received: from int-mx01.intmail.prod.int.phx2.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id p56LJm7w011051 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Mon, 6 Jun 2011 17:19:48 -0400 Received: from host1.jankratochvil.net (ovpn-113-49.phx2.redhat.com [10.3.113.49]) by int-mx01.intmail.prod.int.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id p56LJjKJ010678 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Mon, 6 Jun 2011 17:19:47 -0400 Received: from host1.jankratochvil.net (localhost [127.0.0.1]) by host1.jankratochvil.net (8.14.4/8.14.4) with ESMTP id p56LJjwh026247; Mon, 6 Jun 2011 23:19:45 +0200 Received: (from jkratoch@localhost) by host1.jankratochvil.net (8.14.4/8.14.4/Submit) id p56LJh6l026241; Mon, 6 Jun 2011 23:19:43 +0200 Date: Mon, 06 Jun 2011 21:20:00 -0000 From: Jan Kratochvil To: Pedro Alves Cc: gdb-patches@sourceware.org Subject: Re: [patch] physname regression: Non-matching type false breakpoint Message-ID: <20110606211943.GA9362@host1.jankratochvil.net> References: <20110605153419.GA14873@host1.jankratochvil.net> <201106061021.30546.pedro@codesourcery.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <201106061021.30546.pedro@codesourcery.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-IsSubscribed: yes Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2011-06/txt/msg00089.txt.bz2 On Mon, 06 Jun 2011 11:21:30 +0200, Pedro Alves wrote: > I have trouble parsing this sentence. I agree the original sentence by me was bogus. > + /* If we found a single field with that name, and we were not given > + a specific overload instance in COPY, accept the field, if it's > + really a method. */ > + if (i1 == 1 && strchr (copy, '(') == NULL) The point was IMO not when to accept the field but rather when to reject it - that an additional comparison is needed. Adjusted the text. Thanks, Jan gdb/ 2011-06-06 Jan Kratochvil * linespec.c (find_method): Accept the function type automatically only if it was specified with parameter types. gdb/testsuite/ 2011-06-06 Jan Kratochvil * gdb.cp/paren-type.cc: New files. * gdb.cp/paren-type.exp: New files. --- a/gdb/linespec.c +++ b/gdb/linespec.c @@ -1697,7 +1697,10 @@ find_method (int funfirstline, struct linespec_result *canonical, i1 = find_methods (t, copy, SYMBOL_LANGUAGE (sym_class), sym_arr, file_symtab); - if (i1 == 1) + /* If we were given a specific overload instance in COPY defer the field + acceptance till the strcmp_iw verification below even if we found just + a single field with that name. */ + if (i1 == 1 && strchr (copy, '(') == NULL) { /* There is exactly one field with that name. */ sym = sym_arr[0]; --- /dev/null +++ b/gdb/testsuite/gdb.cp/paren-type.cc @@ -0,0 +1,33 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2011 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 . */ + +class C +{ +public: + static void f (short x); +}; + +void +C::f (short x) +{ +} + +int +main () +{ + C::f(1); +} --- /dev/null +++ b/gdb/testsuite/gdb.cp/paren-type.exp @@ -0,0 +1,24 @@ +# Copyright (C) 2011 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 . + +set testfile paren-type +if { [prepare_for_testing ${testfile}.exp ${testfile} ${testfile}.cc {c++ debug}] } { + return -1 +} + +gdb_test "break C::f(long)" {the class `C' does not have any method instance named f\(long\)} + +# Sanity check the breakpoints work for the correct type. +gdb_test "break C::f(short)" "Breakpoint 1 at \[^\r\n\]*"