From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 30169 invoked by alias); 5 Jun 2011 15:34:45 -0000 Received: (qmail 29905 invoked by uid 22791); 5 Jun 2011 15:34:43 -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; Sun, 05 Jun 2011 15:34:25 +0000 Received: from int-mx12.intmail.prod.int.phx2.redhat.com (int-mx12.intmail.prod.int.phx2.redhat.com [10.5.11.25]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id p55FYO3b001629 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for ; Sun, 5 Jun 2011 11:34:25 -0400 Received: from host1.jankratochvil.net (ovpn-113-49.phx2.redhat.com [10.3.113.49]) by int-mx12.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id p55FYMhr017341 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO) for ; Sun, 5 Jun 2011 11:34:24 -0400 Received: from host1.jankratochvil.net (localhost [127.0.0.1]) by host1.jankratochvil.net (8.14.4/8.14.4) with ESMTP id p55FYLmP015236 for ; Sun, 5 Jun 2011 17:34:21 +0200 Received: (from jkratoch@localhost) by host1.jankratochvil.net (8.14.4/8.14.4/Submit) id p55FYKrC015224 for gdb-patches@sourceware.org; Sun, 5 Jun 2011 17:34:20 +0200 Date: Sun, 05 Jun 2011 15:34:00 -0000 From: Jan Kratochvil To: gdb-patches@sourceware.org Subject: [patch] physname regression: Non-matching type false breakpoint Message-ID: <20110605153419.GA14873@host1.jankratochvil.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline 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/msg00068.txt.bz2 Hi, FSF GDB HEAD can now successfully break on a function which does not match the specified type. This is a physname regression. Thanks, Jan gdb/ 2011-06-05 Jan Kratochvil * linespec.c (find_method): Accept the function type automatically only if it was specified with parameter types. gdb/testsuite/ 2011-06-05 Jan Kratochvil * gdb.cp/paren-type.cc: New files. * gdb.cp/paren-type.exp: New files. --- a/gdb/linespec.c +++ b/gdb/linespec.c @@ -1732,7 +1732,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) + /* The strchr check is there if any types were specified verify the single + found found parameter types really match those specified by user in COPY. + */ + 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\]*"