diff options
author | Daniel Jacobowitz <dan@debian.org> | 2006-10-09 19:28:14 +0000 |
---|---|---|
committer | Daniel Jacobowitz <dan@debian.org> | 2006-10-09 19:28:14 +0000 |
commit | f9dde0a9db7d3c38f81198f6622171cd1405a270 (patch) | |
tree | 0c7896ee2a70b87681ca956b87057f2ab49c5ebf /gdb | |
parent | 0b2e9d472050470b67c1079316225a467b233d15 (diff) | |
download | gdb-f9dde0a9db7d3c38f81198f6622171cd1405a270.tar.gz |
2006-10-09 Paul Pluzhnikov <ppluzhnikov@charter.net>
PR c++/2116
* valops.c (find_overload_match): Check for a NULL name.
2006-10-09 Daniel Jacobowitz <dan@codesourcery.com>
PR c++/2116
* gdb.cp/call-c.cc, gdb.cp/call-c.exp, gdb.cp/call-c-1.c: New.
Diffstat (limited to 'gdb')
-rw-r--r-- | gdb/ChangeLog | 5 | ||||
-rw-r--r-- | gdb/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gdb/testsuite/gdb.cp/call-c-1.c | 21 | ||||
-rw-r--r-- | gdb/testsuite/gdb.cp/call-c.cc | 29 | ||||
-rw-r--r-- | gdb/testsuite/gdb.cp/call-c.exp | 47 | ||||
-rw-r--r-- | gdb/valops.c | 11 |
6 files changed, 115 insertions, 3 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index eba4f8e7948..81589e5eec4 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,8 @@ +2006-10-09 Paul Pluzhnikov <ppluzhnikov@charter.net> + + PR c++/2116 + * valops.c (find_overload_match): Check for a NULL name. + 2006-10-06 Joel Brobecker <brobecker@adacore.com> * dwarf2read.c (read_array_type): Set the type name if the name diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index 744f68299c8..ea04872fea5 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2006-10-09 Daniel Jacobowitz <dan@codesourcery.com> + + PR c++/2116 + * gdb.cp/call-c.cc, gdb.cp/call-c.exp, gdb.cp/call-c-1.c: New. + 2006-10-06 Joel Brobecker <brobecker@adacore.com> * gdb.ada/arrayidx.exp: Remove calls to setup_kfail now that diff --git a/gdb/testsuite/gdb.cp/call-c-1.c b/gdb/testsuite/gdb.cp/call-c-1.c new file mode 100644 index 00000000000..32d8e536fec --- /dev/null +++ b/gdb/testsuite/gdb.cp/call-c-1.c @@ -0,0 +1,21 @@ +/* This test script is part of GDB, the GNU debugger. + + Copyright 2006 + 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 2 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, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +int foo(int x) { return x; } diff --git a/gdb/testsuite/gdb.cp/call-c.cc b/gdb/testsuite/gdb.cp/call-c.cc new file mode 100644 index 00000000000..77be441319c --- /dev/null +++ b/gdb/testsuite/gdb.cp/call-c.cc @@ -0,0 +1,29 @@ +/* This test script is part of GDB, the GNU debugger. + + Copyright 2006 + 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 2 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, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +int func(int x) +{ + return x; +} + +int main() +{ + return func(0); +} diff --git a/gdb/testsuite/gdb.cp/call-c.exp b/gdb/testsuite/gdb.cp/call-c.exp new file mode 100644 index 00000000000..879e1954472 --- /dev/null +++ b/gdb/testsuite/gdb.cp/call-c.exp @@ -0,0 +1,47 @@ +# Copyright 2006 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 2 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, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +if $tracelevel then { + strace $tracelevel +} + +set prms_id 0 +set bug_id 0 + +if { [skip_cplus_tests] } { continue } + +set testfile call-c +set binfile ${objdir}/${subdir}/${testfile} +set srcfilec ${srcdir}/${subdir}/${testfile}-1.c +set srcfilecpp ${srcdir}/${subdir}/${testfile}.cc +set objfilec ${objdir}/${subdir}/${testfile}-1.o +set objfilecpp ${objdir}/${subdir}/${testfile}.o + +if {[gdb_compile "${srcfilec}" "${objfilec}" object {debug}] != "" + || [gdb_compile "${srcfilecpp}" "${objfilecpp}" object {c++ debug}] != "" + || [gdb_compile "${objfilecpp} ${objfilec}" "${binfile}" executable {c++ debug}] != ""} { + untested hang.exp + return -1 +} + +gdb_exit +gdb_start +gdb_reinitialize_dir $srcdir/$subdir +gdb_load ${binfile} + +runto_main + +gdb_test "print foo(1)" "\\\$$decimal = 1" diff --git a/gdb/valops.c b/gdb/valops.c index 7d1b7d83e70..15c407c0af2 100644 --- a/gdb/valops.c +++ b/gdb/valops.c @@ -1889,10 +1889,15 @@ find_overload_match (struct type **arg_types, int nargs, char *name, int method, else { const char *qualified_name = SYMBOL_CPLUS_DEMANGLED_NAME (fsym); - func_name = cp_func_name (qualified_name); - /* If the name is NULL this must be a C-style function. - Just return the same symbol. */ + /* If we have a C++ name, try to extract just the function + part. */ + if (qualified_name) + func_name = cp_func_name (qualified_name); + + /* If there was no C++ name, this must be a C-style function. + Just return the same symbol. Do the same if cp_func_name + fails for some reason. */ if (func_name == NULL) { *symp = fsym; |