aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorMark Mitchell <mmitchell@usa.net>1998-05-12 07:27:15 +0000
committerMark Mitchell <mmitchel@gcc.gnu.org>1998-05-12 07:27:15 +0000
commit7bc6a9ffaa55bd7593fe04984a46e2dc8f7175b5 (patch)
tree9613899c96d081c84ed98644d28a9d3859a3f9e4 /gcc
parent07389efeea3381d2a710e0a8e4454a99d0f157cd (diff)
downloadgcc-7bc6a9ffaa55bd7593fe04984a46e2dc8f7175b5.zip
gcc-7bc6a9ffaa55bd7593fe04984a46e2dc8f7175b5.tar.gz
gcc-7bc6a9ffaa55bd7593fe04984a46e2dc8f7175b5.tar.bz2
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
Diffstat (limited to 'gcc')
-rw-r--r--gcc/cp/ChangeLog4
-rw-r--r--gcc/cp/cp-tree.h8
-rw-r--r--gcc/cp/method.c8
3 files changed, 15 insertions, 5 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 79a5c44..b58f01e 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,5 +1,9 @@
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 ...
(dump_decl): Use it.
diff --git a/gcc/cp/cp-tree.h b/gcc/cp/cp-tree.h
index e76c85b..d02c7e7 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 ef048f3..5ebcac9 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);
}