mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-02-06 01:20:00 +08:00
ABI change: Mangle `void (A::*)() const' as M1AKFvvE, not MK1AFvvE.
ABI change: Mangle `void (A::*)() const' as M1AKFvvE, not MK1AFvvE. * mangle.c (write_function_type): Write cv-quals for member function type here. (write_pointer_to_member_type): Not here. From-SVN: r49887
This commit is contained in:
parent
e4e35417f9
commit
6ea868b758
@ -1,3 +1,11 @@
|
|||||||
|
2002-02-19 Jason Merrill <jason@redhat.com>
|
||||||
|
|
||||||
|
ABI change: Mangle `void (A::*)() const' as
|
||||||
|
M1AKFvvE, not MK1AFvvE.
|
||||||
|
* mangle.c (write_function_type): Write cv-quals for member
|
||||||
|
function type here.
|
||||||
|
(write_pointer_to_member_type): Not here.
|
||||||
|
|
||||||
2002-02-18 Jason Merrill <jason@redhat.com>
|
2002-02-18 Jason Merrill <jason@redhat.com>
|
||||||
|
|
||||||
* pt.c (do_type_instantiation): Don't pedwarn if in_system_header.
|
* pt.c (do_type_instantiation): Don't pedwarn if in_system_header.
|
||||||
|
@ -1595,6 +1595,17 @@ write_function_type (type)
|
|||||||
{
|
{
|
||||||
MANGLE_TRACE_TREE ("function-type", type);
|
MANGLE_TRACE_TREE ("function-type", type);
|
||||||
|
|
||||||
|
/* For a pointer to member function, the function type may have
|
||||||
|
cv-qualifiers, indicating the quals for the artificial 'this'
|
||||||
|
parameter. */
|
||||||
|
if (TREE_CODE (type) == METHOD_TYPE)
|
||||||
|
{
|
||||||
|
/* The first parameter must be a POINTER_TYPE pointing to the
|
||||||
|
`this' parameter. */
|
||||||
|
tree this_type = TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (type)));
|
||||||
|
write_CV_qualifiers_for_type (this_type);
|
||||||
|
}
|
||||||
|
|
||||||
write_char ('F');
|
write_char ('F');
|
||||||
/* We don't track whether or not a type is `extern "C"'. Note that
|
/* We don't track whether or not a type is `extern "C"'. Note that
|
||||||
you can have an `extern "C"' function that does not have
|
you can have an `extern "C"' function that does not have
|
||||||
@ -2021,23 +2032,6 @@ write_pointer_to_member_type (type)
|
|||||||
tree type;
|
tree type;
|
||||||
{
|
{
|
||||||
write_char ('M');
|
write_char ('M');
|
||||||
/* For a pointer-to-function member, the class type may be
|
|
||||||
cv-qualified, but that won't be reflected in
|
|
||||||
TYPE_PTRMEM_CLASS_TYPE. So, we go fishing around in
|
|
||||||
TYPE_PTRMEM_POINTED_TO_TYPE instead. */
|
|
||||||
if (TYPE_PTRMEMFUNC_P (type))
|
|
||||||
{
|
|
||||||
tree fn_type;
|
|
||||||
tree this_type;
|
|
||||||
|
|
||||||
fn_type = TYPE_PTRMEM_POINTED_TO_TYPE (type);
|
|
||||||
/* The first parameter must be a POINTER_TYPE pointing to the
|
|
||||||
`this' parameter. */
|
|
||||||
this_type = TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (fn_type)));
|
|
||||||
write_type (this_type);
|
|
||||||
}
|
|
||||||
/* For a pointer-to-data member, things are simpler. */
|
|
||||||
else
|
|
||||||
write_type (TYPE_PTRMEM_CLASS_TYPE (type));
|
write_type (TYPE_PTRMEM_CLASS_TYPE (type));
|
||||||
write_type (TYPE_PTRMEM_POINTED_TO_TYPE (type));
|
write_type (TYPE_PTRMEM_POINTED_TO_TYPE (type));
|
||||||
}
|
}
|
||||||
|
6
gcc/testsuite/g++.dg/abi/mangle5.C
Normal file
6
gcc/testsuite/g++.dg/abi/mangle5.C
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
// Test mangling of pointers to cv-qualified member functions
|
||||||
|
|
||||||
|
struct A;
|
||||||
|
void f (void (A::*)() const) {}
|
||||||
|
|
||||||
|
// { dg-final { scan-assembler "\n_?_Z1fM1AKFvvE\[: \t\n\]" } }
|
Loading…
Reference in New Issue
Block a user