gdb/
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:
parent
93b55aa198
commit
bc9a5551ca
5 changed files with 94 additions and 7 deletions
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue