cp-tree.h (TYPE_PTRMEM_CLASS_TYPE): Improve documentation.
* cp-tree.h (TYPE_PTRMEM_CLASS_TYPE): Improve documentation. * mangle.c (write_pointer_to_member_type): Fix mangling of pointers to cv-qualified member function types. From-SVN: r41373
This commit is contained in:
parent
1b4a93f79b
commit
24272dc037
@ -1,5 +1,9 @@
|
|||||||
2001-04-15 Mark Mitchell <mark@codesourcery.com>
|
2001-04-15 Mark Mitchell <mark@codesourcery.com>
|
||||||
|
|
||||||
|
* cp-tree.h (TYPE_PTRMEM_CLASS_TYPE): Improve documentation.
|
||||||
|
* mangle.c (write_pointer_to_member_type): Fix mangling of
|
||||||
|
pointers to cv-qualified member function types.
|
||||||
|
|
||||||
* init.c (build_delete): Create a SAVE_EXPR for the address if
|
* init.c (build_delete): Create a SAVE_EXPR for the address if
|
||||||
we're going to use it more than once.
|
we're going to use it more than once.
|
||||||
|
|
||||||
|
@ -2691,7 +2691,11 @@ extern int flag_new_for_scope;
|
|||||||
/* Returns the pfn field from a TYPE_PTRMEMFUNC_P. */
|
/* Returns the pfn field from a TYPE_PTRMEMFUNC_P. */
|
||||||
#define PFN_FROM_PTRMEMFUNC(NODE) pfn_from_ptrmemfunc ((NODE))
|
#define PFN_FROM_PTRMEMFUNC(NODE) pfn_from_ptrmemfunc ((NODE))
|
||||||
|
|
||||||
/* For a pointer-to-member type of the form `T X::*', this is `X'. */
|
/* For a pointer-to-member type of the form `T X::*', this is `X'.
|
||||||
|
For a type like `void (X::*)() const', this type is `X', not `const
|
||||||
|
X'. To get at the `const X' you have to look at the
|
||||||
|
TYPE_PTRMEM_POINTED_TO_TYPE; there, the first parameter will have
|
||||||
|
type `const X*'. */
|
||||||
#define TYPE_PTRMEM_CLASS_TYPE(NODE) \
|
#define TYPE_PTRMEM_CLASS_TYPE(NODE) \
|
||||||
(TYPE_PTRMEM_P ((NODE)) \
|
(TYPE_PTRMEM_P ((NODE)) \
|
||||||
? TYPE_OFFSET_BASETYPE (TREE_TYPE ((NODE))) \
|
? TYPE_OFFSET_BASETYPE (TREE_TYPE ((NODE))) \
|
||||||
|
@ -1928,7 +1928,24 @@ write_pointer_to_member_type (type)
|
|||||||
tree type;
|
tree type;
|
||||||
{
|
{
|
||||||
write_char ('M');
|
write_char ('M');
|
||||||
write_type (TYPE_PTRMEM_CLASS_TYPE (type));
|
/* For a pointer-to-function member, the class type may be
|
||||||
|
cv-qualified, bug 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_POINTED_TO_TYPE (type));
|
write_type (TYPE_PTRMEM_POINTED_TO_TYPE (type));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
7
gcc/testsuite/g++.old-deja/g++.abi/mangle1.C
Normal file
7
gcc/testsuite/g++.old-deja/g++.abi/mangle1.C
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
// Build don't link:
|
||||||
|
// Origin: Mark Mitchell <mark@codesourcery.com>
|
||||||
|
|
||||||
|
struct S {};
|
||||||
|
|
||||||
|
void f (void (S::*)()) {}
|
||||||
|
void f (void (S::*)() const) {}
|
Loading…
Reference in New Issue
Block a user