Commit 7bc6a9ff by Mark Mitchell Committed by Mark Mitchell

cp-tree.h (CANONICAL_TYPE_VARIANT): New macro.

	* cp-tree.h (CANONICAL_TYPE_VARIANT): New macro.
	* method.c (build_mangled_name): Use it.
	(build_decl_overload_real): Likewise.

From-SVN: r19695
parent 07389efe
Tue May 12 07:24:18 1998 Mark Mitchell <mmitchell@usa.net> Tue May 12 07:24:18 1998 Mark Mitchell <mmitchell@usa.net>
* cp-tree.h (CANONICAL_TYPE_VARIANT): New macro.
* method.c (build_mangled_name): Use it.
(build_decl_overload_real): Likewise.
* error.c (dump_simple_decl): New function, broken out from ... * error.c (dump_simple_decl): New function, broken out from ...
(dump_decl): Use it. (dump_decl): Use it.
......
...@@ -596,6 +596,14 @@ struct lang_type ...@@ -596,6 +596,14 @@ struct lang_type
#define TYPE_HAS_ASSIGNMENT(NODE) (TYPE_LANG_SPECIFIC(NODE)->type_flags.has_assignment) #define TYPE_HAS_ASSIGNMENT(NODE) (TYPE_LANG_SPECIFIC(NODE)->type_flags.has_assignment)
#define TYPE_HAS_REAL_ASSIGNMENT(NODE) (TYPE_LANG_SPECIFIC(NODE)->type_flags.has_real_assignment) #define TYPE_HAS_REAL_ASSIGNMENT(NODE) (TYPE_LANG_SPECIFIC(NODE)->type_flags.has_real_assignment)
/* Returns the canonical version of TYPE. In other words, if TYPE is
a typedef, returns the underlying type. The cv-qualification of
the type returned matches the type input; they will always be
compatible types. */
#define CANONICAL_TYPE_VARIANT(NODE) \
(cp_build_type_variant (TYPE_MAIN_VARIANT (NODE), \
TYPE_READONLY (NODE), TYPE_VOLATILE (NODE)))
/* Nonzero for _CLASSTYPE means that operator new and delete are defined, /* Nonzero for _CLASSTYPE means that operator new and delete are defined,
respectively. */ respectively. */
#define TYPE_GETS_NEW(NODE) (TYPE_LANG_SPECIFIC(NODE)->type_flags.gets_new) #define TYPE_GETS_NEW(NODE) (TYPE_LANG_SPECIFIC(NODE)->type_flags.gets_new)
......
...@@ -1004,15 +1004,14 @@ build_mangled_name (parmtypes, begin, end) ...@@ -1004,15 +1004,14 @@ build_mangled_name (parmtypes, begin, end)
{ {
if (TYPE_PTRMEMFUNC_P (parmtypes)) if (TYPE_PTRMEMFUNC_P (parmtypes))
parmtypes = TYPE_PTRMEMFUNC_FN_TYPE (parmtypes); parmtypes = TYPE_PTRMEMFUNC_FN_TYPE (parmtypes);
parmtypes = CANONICAL_TYPE_VARIANT (parmtypes);
process_modifiers (parmtypes); process_modifiers (parmtypes);
process_overload_item (parmtypes, FALSE); process_overload_item (parmtypes, FALSE);
} }
else { else {
for ( ; parmtypes!=NULL; parmtypes = TREE_CHAIN (parmtypes)) for ( ; parmtypes!=NULL; parmtypes = TREE_CHAIN (parmtypes))
{ {
parmtype = TREE_VALUE (parmtypes); parmtype = CANONICAL_TYPE_VARIANT (TREE_VALUE (parmtypes));
parmtype = build_type_variant (TYPE_MAIN_VARIANT (parmtype),
TYPE_READONLY (parmtype), TYPE_VOLATILE (parmtype));
if (flag_do_squangling) /* squangling style repeats */ if (flag_do_squangling) /* squangling style repeats */
{ {
if (parmtype == lasttype) if (parmtype == lasttype)
...@@ -1612,8 +1611,7 @@ build_decl_overload_real (dname, parms, ret_type, tparms, targs, ...@@ -1612,8 +1611,7 @@ build_decl_overload_real (dname, parms, ret_type, tparms, targs,
tree temp = TREE_VALUE (t); tree temp = TREE_VALUE (t);
TREE_USED (temp) = 0; TREE_USED (temp) = 0;
/* clear out the type variant in case we used it */ /* clear out the type variant in case we used it */
temp = build_type_variant (TYPE_MAIN_VARIANT (temp), temp = CANONICAL_TYPE_VARIANT (temp);
TYPE_READONLY (temp), TYPE_VOLATILE (temp));
TREE_USED (temp) = 0; TREE_USED (temp) = 0;
t = TREE_CHAIN (t); t = TREE_CHAIN (t);
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment