From: Mark Mitchell Date: Tue, 12 May 1998 07:27:15 +0000 (+0000) Subject: cp-tree.h (CANONICAL_TYPE_VARIANT): New macro. X-Git-Tag: prereleases/egcs-1.1-prerelease~1340 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=7bc6a9ffaa55bd7593fe04984a46e2dc8f7175b5;p=thirdparty%2Fgcc.git 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 --- diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 79a5c44ac84e..b58f01e66e5b 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,9 @@ Tue May 12 07:24:18 1998 Mark Mitchell + * 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 ... (dump_decl): Use it. diff --git a/gcc/cp/cp-tree.h b/gcc/cp/cp-tree.h index e76c85b3e8d8..d02c7e74a1c6 100644 --- a/gcc/cp/cp-tree.h +++ b/gcc/cp/cp-tree.h @@ -596,6 +596,14 @@ struct lang_type #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) +/* 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, respectively. */ #define TYPE_GETS_NEW(NODE) (TYPE_LANG_SPECIFIC(NODE)->type_flags.gets_new) diff --git a/gcc/cp/method.c b/gcc/cp/method.c index ef048f3b9009..5ebcac9e65f3 100644 --- a/gcc/cp/method.c +++ b/gcc/cp/method.c @@ -1004,15 +1004,14 @@ build_mangled_name (parmtypes, begin, end) { if (TYPE_PTRMEMFUNC_P (parmtypes)) parmtypes = TYPE_PTRMEMFUNC_FN_TYPE (parmtypes); + parmtypes = CANONICAL_TYPE_VARIANT (parmtypes); process_modifiers (parmtypes); process_overload_item (parmtypes, FALSE); } else { for ( ; parmtypes!=NULL; parmtypes = TREE_CHAIN (parmtypes)) { - parmtype = TREE_VALUE (parmtypes); - parmtype = build_type_variant (TYPE_MAIN_VARIANT (parmtype), - TYPE_READONLY (parmtype), TYPE_VOLATILE (parmtype)); + parmtype = CANONICAL_TYPE_VARIANT (TREE_VALUE (parmtypes)); if (flag_do_squangling) /* squangling style repeats */ { if (parmtype == lasttype) @@ -1612,8 +1611,7 @@ build_decl_overload_real (dname, parms, ret_type, tparms, targs, tree temp = TREE_VALUE (t); TREE_USED (temp) = 0; /* clear out the type variant in case we used it */ - temp = build_type_variant (TYPE_MAIN_VARIANT (temp), - TYPE_READONLY (temp), TYPE_VOLATILE (temp)); + temp = CANONICAL_TYPE_VARIANT (temp); TREE_USED (temp) = 0; t = TREE_CHAIN (t); }