Fix const/volatile qualifiers of C++ types, PR c++/12328.
	* c-typeprint.c (c_type_print_args): Update the function comment.  New
	variable param_type, initialize it.  Remove const/volatile qualifiers
	for language_cplus and !show_artificial.  Use param_type.

gdb/testsuite/
	Fix const/volatile qualifiers of C++ types, PR c++/12328.
	* gdb.cp/overload-const.exp: New file.
	* gdb.cp/overload-const.cc: New file.
This commit is contained in:
Jan Kratochvil 2011-02-13 09:15:54 +00:00
parent 93b55aa198
commit bc9a5551ca
5 changed files with 94 additions and 7 deletions

View file

@ -1,3 +1,10 @@
2011-02-13 Jan Kratochvil <jan.kratochvil@redhat.com>
Fix const/volatile qualifiers of C++ types, PR c++/12328.
* c-typeprint.c (c_type_print_args): Update the function comment. New
variable param_type, initialize it. Remove const/volatile qualifiers
for language_cplus and !show_artificial. Use param_type.
2011-02-13 Jan Kratochvil <jan.kratochvil@redhat.com>
* symtab.c (find_pc_sect_line): New variable objfile, initialize it

View file

@ -388,9 +388,12 @@ c_type_print_modifier (struct type *type, struct ui_file *stream,
/* Print out the arguments of TYPE, which should have TYPE_CODE_METHOD
or TYPE_CODE_FUNC, to STREAM. Artificial arguments, such as "this"
in non-static methods, are displayed if SHOW_ARTIFICIAL is
non-zero. LANGUAGE is the language in which TYPE was defined.
This is a necessary evil since this code is used by the C, C++, and
Java backends. */
non-zero. If SHOW_ARTIFICIAL is zero and LANGUAGE is language_cplus
the topmost parameter types get removed their possible const and volatile
qualifiers to match demangled linkage name parameters part of such function
type. LANGUAGE is the language in which TYPE was defined. This is
a necessary evil since this code is used by the C, C++, and Java backends.
*/
void
c_type_print_args (struct type *type, struct ui_file *stream,
@ -406,6 +409,8 @@ c_type_print_args (struct type *type, struct ui_file *stream,
for (i = 0; i < TYPE_NFIELDS (type); i++)
{
struct type *param_type;
if (TYPE_FIELD_ARTIFICIAL (type, i) && !show_artificial)
continue;
@ -415,12 +420,24 @@ c_type_print_args (struct type *type, struct ui_file *stream,
wrap_here (" ");
}
param_type = TYPE_FIELD_TYPE (type, i);
if (language == language_cplus && !show_artificial)
{
/* C++ standard, 13.1 Overloadable declarations, point 3, item:
- Parameter declarations that differ only in the presence or
absence of const and/or volatile are equivalent.
And the const/volatile qualifiers are not present in the mangled
names as produced by GCC. */
param_type = make_cv_type (0, 0, param_type, NULL);
}
if (language == language_java)
java_print_type (TYPE_FIELD_TYPE (type, i),
"", stream, -1, 0);
java_print_type (param_type, "", stream, -1, 0);
else
c_print_type (TYPE_FIELD_TYPE (type, i),
"", stream, -1, 0);
c_print_type (param_type, "", stream, -1, 0);
printed_any = 1;
}

View file

@ -1,3 +1,9 @@
2011-02-13 Jan Kratochvil <jan.kratochvil@redhat.com>
Fix const/volatile qualifiers of C++ types, PR c++/12328.
* gdb.cp/overload-const.exp: New file.
* gdb.cp/overload-const.cc: New file.
2011-02-08 Ulrich Weigand <uweigand@de.ibm.com>
* gdb.opencl/callfuncs.cl: New file.

View file

@ -0,0 +1,28 @@
/* This test case 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 <http://www.gnu.org/licenses/>. */
class myclass
{
public:
static void func(const int aa) {}
};
int
main ()
{
myclass::func (42);
}

View file

@ -0,0 +1,29 @@
# 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 <http://www.gnu.org/licenses/>.
# This file is part of the gdb testsuite.
if {[skip_cplus_tests]} { continue }
set testfile "overload-const"
if [prepare_for_testing $testfile $testfile $testfile.cc {c++ debug}] {
return -1
}
gdb_test_no_output "set language c++"
if [gdb_breakpoint "myclass::func"] {
pass "setting breakpoint at myclass::func"
}