From 418c7cf76163513b4e26ff980214fc68bab5e0d5 Mon Sep 17 00:00:00 2001 From: Jan Kratochvil Date: Fri, 1 Jul 2011 20:27:59 +0000 Subject: [PATCH] gdb/ * linespec.c (find_method): Accept the function type automatically only if it was specified with parameter types. gdb/testsuite/ * gdb.cp/paren-type.cc: New files. * gdb.cp/paren-type.exp: New files. --- gdb/ChangeLog | 5 +++++ gdb/linespec.c | 5 ++++- gdb/testsuite/ChangeLog | 5 +++++ gdb/testsuite/gdb.cp/paren-type.cc | 33 +++++++++++++++++++++++++++++ gdb/testsuite/gdb.cp/paren-type.exp | 26 +++++++++++++++++++++++ 5 files changed, 73 insertions(+), 1 deletion(-) create mode 100644 gdb/testsuite/gdb.cp/paren-type.cc create mode 100644 gdb/testsuite/gdb.cp/paren-type.exp diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 5ac570edfa..406da713d3 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,8 @@ +2011-07-01 Jan Kratochvil + + * linespec.c (find_method): Accept the function type automatically only + if it was specified with parameter types. + 2011-07-01 Jan Kratochvil Stop on first linespec terminator instead of eating what we can. diff --git a/gdb/linespec.c b/gdb/linespec.c index 1b5b6f1e85..7740633ff2 100644 --- 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]; diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index a0ecba7740..7a37183d27 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2011-07-01 Jan Kratochvil + + * gdb.cp/paren-type.cc: New files. + * gdb.cp/paren-type.exp: New files. + 2011-07-01 Jan Kratochvil Stop on first linespec terminator instead of eating what we can. diff --git a/gdb/testsuite/gdb.cp/paren-type.cc b/gdb/testsuite/gdb.cp/paren-type.cc new file mode 100644 index 0000000000..00c48722e5 --- /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); +} diff --git a/gdb/testsuite/gdb.cp/paren-type.exp b/gdb/testsuite/gdb.cp/paren-type.exp new file mode 100644 index 0000000000..daba5215b2 --- /dev/null +++ b/gdb/testsuite/gdb.cp/paren-type.exp @@ -0,0 +1,26 @@ +# 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_no_output "set breakpoint pending off" + +gdb_test "break C::f(long)" {Function "C::f\(long\)" not defined\.} + +# Sanity check the breakpoints work for the correct type. +gdb_test "break C::f(short)" "Breakpoint 1 at \[^\r\n\]*" -- 2.34.1