http://sourceware.org/ml/gdb-cvs/2011-02/msg00063.html ### src/gdb/ChangeLog 2011/02/12 13:07:38 1.12557 ### src/gdb/ChangeLog 2011/02/13 09:09:33 1.12558 ## -1,3 +1,9 @@ +2011-02-13 Jan Kratochvil + + * symtab.c (find_pc_sect_line): New variable objfile, initialize it + from S. Iterate S using ALL_OBJFILE_SYMTABS. Verify BV for each S. + * symtab.h (struct symtab) : Comment extension. + 2011-02-12 Yao Qi * Makefile.in (CLEANDIRS): Remove duplicated common dir. --- src/gdb/symtab.c 2011/01/11 21:53:24 1.257 +++ src/gdb/symtab.c 2011/02/13 09:09:36 1.258 @@ -1904,6 +1904,7 @@ struct blockvector *bv; struct minimal_symbol *msymbol; struct minimal_symbol *mfunsym; + struct objfile *objfile; /* Info on best line seen so far, and where it starts, and its file. */ @@ -2031,13 +2032,17 @@ } bv = BLOCKVECTOR (s); + objfile = s->objfile; /* Look at all the symtabs that share this blockvector. They all have the same apriori range, that we found was right; but they have different line tables. */ - for (; s && BLOCKVECTOR (s) == bv; s = s->next) + ALL_OBJFILE_SYMTABS (objfile, s) { + if (BLOCKVECTOR (s) != bv) + continue; + /* Find the best line in this symtab. */ l = LINETABLE (s); if (!l) --- src/gdb/symtab.h 2011/01/11 21:53:25 1.168 +++ src/gdb/symtab.h 2011/02/13 09:09:36 1.169 @@ -738,8 +738,7 @@ struct symtab { - - /* Chain of all existing symtabs. */ + /* Unordered chain of all existing symtabs of this objfile. */ struct symtab *next; http://sourceware.org/ml/gdb-cvs/2011-02/msg00064.html ### src/gdb/ChangeLog 2011/02/13 09:09:33 1.12558 ### src/gdb/ChangeLog 2011/02/13 09:15:50 1.12559 ## -1,5 +1,12 @@ 2011-02-13 Jan Kratochvil + 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 + * symtab.c (find_pc_sect_line): New variable objfile, initialize it from S. Iterate S using ALL_OBJFILE_SYMTABS. Verify BV for each S. * symtab.h (struct symtab) : Comment extension. --- src/gdb/c-typeprint.c 2011/01/07 19:36:15 1.68 +++ src/gdb/c-typeprint.c 2011/02/13 09:15:53 1.69 @@ -388,9 +388,12 @@ /* 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 @@ 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 @@ 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; } ### src/gdb/testsuite/ChangeLog 2011/02/08 13:30:08 1.2576 ### src/gdb/testsuite/ChangeLog 2011/02/13 09:15:53 1.2577 ## -1,3 +1,9 @@ +2011-02-13 Jan Kratochvil + + 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 * gdb.opencl/callfuncs.cl: New file. --- src/gdb/testsuite/gdb.cp/overload-const.cc +++ src/gdb/testsuite/gdb.cp/overload-const.cc 2011-02-13 17:47:15.587780000 +0000 @@ -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 . */ + +class myclass +{ +public: + static void func(const int aa) {} +}; + +int +main () +{ + myclass::func (42); +} --- src/gdb/testsuite/gdb.cp/overload-const.exp +++ src/gdb/testsuite/gdb.cp/overload-const.exp 2011-02-13 17:47:15.884698000 +0000 @@ -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 . + +# 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" +}