diff options
author | Nathan Sidwell <nathan@gcc.gnu.org> | 2003-12-11 15:35:37 +0000 |
---|---|---|
committer | Nathan Sidwell <nathan@gcc.gnu.org> | 2003-12-11 15:35:37 +0000 |
commit | c1eb7f5ccd258644d9db3e8e59e5ec61ac66089b (patch) | |
tree | 4e70fa01b2e7d5612debfa644326b44e9545a9b0 /gcc | |
parent | c1fb3625aebaa9ccacc16eb185f04a93e4ed459f (diff) | |
download | gcc-c1eb7f5ccd258644d9db3e8e59e5ec61ac66089b.zip gcc-c1eb7f5ccd258644d9db3e8e59e5ec61ac66089b.tar.gz gcc-c1eb7f5ccd258644d9db3e8e59e5ec61ac66089b.tar.bz2 |
mangle.c (conv_type_names): Holds IDENTIFIER_NODEs only.
* mangle.c (conv_type_names): Holds IDENTIFIER_NODEs only.
(hash_type): Use TYPE_UID of the identifier's type.
(compare_type): Adjust.
(mangle_conv_op_name_for_type): Store identifier nodes only, use
TYPE_UID has hash value.
From-SVN: r74538
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/cp/ChangeLog | 18 | ||||
-rw-r--r-- | gcc/cp/mangle.c | 45 |
2 files changed, 37 insertions, 26 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 0ed8367..5cad5c0 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,11 @@ +2003-12-11 Nathan Sidwell <nathan@codesourcery.com> + + * mangle.c (conv_type_names): Holds IDENTIFIER_NODEs only. + (hash_type): Use TYPE_UID of the identifier's type. + (compare_type): Adjust. + (mangle_conv_op_name_for_type): Store identifier nodes only, use + TYPE_UID has hash value. + 2003-12-10 Mark Mitchell <mark@codesourcery.com> * cp-tree.h (DECL_CONV_FN_P): Check that DECL_NAME is non-NULL. @@ -7,11 +15,11 @@ PR c/13134 * decl.c (duplicate_decls): Copy visibility flag when appropriate. -2003-12-09 Giovanni Bajo <giovannibajo@gcc.gnu.org>
-
- * init.c (build_new_1): Deal with an OVERLOAD set when
- looking up for _Jv_AllocObject.
- * except.c (build_throw): Likewise for _Jv_Throw.
+2003-12-09 Giovanni Bajo <giovannibajo@gcc.gnu.org> + + * init.c (build_new_1): Deal with an OVERLOAD set when + looking up for _Jv_AllocObject. + * except.c (build_throw): Likewise for _Jv_Throw. 2003-12-08 Jason Merrill <jason@redhat.com> diff --git a/gcc/cp/mangle.c b/gcc/cp/mangle.c index 94c885c..351a7e2 100644 --- a/gcc/cp/mangle.c +++ b/gcc/cp/mangle.c @@ -2602,8 +2602,8 @@ mangle_thunk (tree fn_decl, const int this_adjusting, tree fixed_offset, } /* This hash table maps TYPEs to the IDENTIFIER for a conversion - operator to TYPE. The nodes are TREE_LISTs whose TREE_PURPOSE is - the TYPE and whose TREE_VALUE is the IDENTIFIER. */ + operator to TYPE. The nodes are IDENTIFIERs whose TREE_TYPE is the + TYPE. */ static GTY ((param_is (union tree_node))) htab_t conv_type_names; @@ -2612,7 +2612,7 @@ static GTY ((param_is (union tree_node))) htab_t conv_type_names; static hashval_t hash_type (const void *val) { - return htab_hash_pointer (TREE_PURPOSE ((tree) val)); + return (hashval_t) TYPE_UID (TREE_TYPE ((tree) val)); } /* Compare VAL1 (a node in the table) with VAL2 (a TYPE). */ @@ -2620,7 +2620,7 @@ hash_type (const void *val) static int compare_type (const void *val1, const void *val2) { - return TREE_PURPOSE ((tree) val1) == (tree) val2; + return TREE_TYPE ((tree) val1) == (tree) val2; } /* Return an identifier for the mangled unqualified name for a @@ -2632,29 +2632,32 @@ mangle_conv_op_name_for_type (const tree type) { void **slot; tree identifier; - char buffer[64]; if (conv_type_names == NULL) conv_type_names = htab_create_ggc (31, &hash_type, &compare_type, NULL); slot = htab_find_slot_with_hash (conv_type_names, type, - htab_hash_pointer (type), INSERT); - if (*slot) - return TREE_VALUE ((tree) *slot); - - /* Create a unique name corresponding to TYPE. */ - sprintf (buffer, "operator %lu", - (unsigned long) htab_elements (conv_type_names)); - identifier = get_identifier (buffer); - *slot = build_tree_list (type, identifier); + (hashval_t) TYPE_UID (type), INSERT); + identifier = (tree)*slot; + if (!identifier) + { + char buffer[64]; + + /* Create a unique name corresponding to TYPE. */ + sprintf (buffer, "operator %lu", + (unsigned long) htab_elements (conv_type_names)); + identifier = get_identifier (buffer); + *slot = identifier; + + /* Hang TYPE off the identifier so it can be found easily later + when performing conversions. */ + TREE_TYPE (identifier) = type; + + /* Set bits on the identifier so we know later it's a conversion. */ + IDENTIFIER_OPNAME_P (identifier) = 1; + IDENTIFIER_TYPENAME_P (identifier) = 1; + } - /* Set bits on the identifier so we know later it's a conversion. */ - IDENTIFIER_OPNAME_P (identifier) = 1; - IDENTIFIER_TYPENAME_P (identifier) = 1; - /* Hang TYPE off the identifier so it can be found easily later when - performing conversions. */ - TREE_TYPE (identifier) = type; - return identifier; } |