diff options
author | Andrew Pinski <pinskia@physics.uc.edu> | 2004-11-15 22:46:25 +0000 |
---|---|---|
committer | Andrew Pinski <pinskia@gcc.gnu.org> | 2004-11-15 14:46:25 -0800 |
commit | e09a5d6295e9aac34a8effb2afd5912fb99b3072 (patch) | |
tree | 0a213aa7f143348bc5b76d1b01caf01f19751a75 /gcc | |
parent | 4c2b2906b0c14c2af7abe20f00ec2b4fcf643a4c (diff) | |
download | gcc-e09a5d6295e9aac34a8effb2afd5912fb99b3072.zip gcc-e09a5d6295e9aac34a8effb2afd5912fb99b3072.tar.gz gcc-e09a5d6295e9aac34a8effb2afd5912fb99b3072.tar.bz2 |
cp-gimplify.c: Include pointer-set.h
2004-11-15 Andrew Pinski <pinskia@physics.uc.edu>
* cp-gimplify.c: Include pointer-set.h
(cp_genericize_r): Use pointer_sets instead of a hashtable.
Also instert the new statement for CLEANUP_STMT.
(cp_genericize): Use pointer_sets instead of a hashtable.
* Make-lang.in (cp-gimplify.o): Depend on pointer-set.h.
From-SVN: r90699
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/cp/ChangeLog | 8 | ||||
-rw-r--r-- | gcc/cp/Make-lang.in | 2 | ||||
-rw-r--r-- | gcc/cp/cp-gimplify.c | 31 |
3 files changed, 25 insertions, 16 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 23d6b6a..f625223 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,11 @@ +2004-11-15 Andrew Pinski <pinskia@physics.uc.edu> + + * cp-gimplify.c: Include pointer-set.h + (cp_genericize_r): Use pointer_sets instead of a hashtable. + Also instert the new statement for CLEANUP_STMT. + (cp_genericize): Use pointer_sets instead of a hashtable. + * Make-lang.in (cp-gimplify.o): Depend on pointer-set.h. + 2004-11-15 Kriang Lerdsuwanakij <lerdsuwa@users.sourceforge.net> Friend class name lookup 1/n, PR c++/18471 diff --git a/gcc/cp/Make-lang.in b/gcc/cp/Make-lang.in index 891d271..641a34e 100644 --- a/gcc/cp/Make-lang.in +++ b/gcc/cp/Make-lang.in @@ -277,7 +277,7 @@ cp/mangle.o: cp/mangle.c $(CXX_TREE_H) $(TM_H) toplev.h real.h gt-cp-mangle.h \ cp/parser.o: cp/parser.c $(CXX_TREE_H) $(TM_H) diagnostic.h gt-cp-parser.h \ output.h cp/cp-gimplify.o: cp/cp-gimplify.c $(CXX_TREE_H) toplev.h c-common.h \ - $(TM_H) coretypes.h + $(TM_H) coretypes.h pointer-set.h cp/name-lookup.o: cp/name-lookup.c $(CONFIG_H) $(SYSTEM_H) coretypes.h \ $(TM_H) $(CXX_TREE_H) timevar.h gt-cp-name-lookup.h toplev.h \ diff --git a/gcc/cp/cp-gimplify.c b/gcc/cp/cp-gimplify.c index d6a2f18..1d10b58 100644 --- a/gcc/cp/cp-gimplify.c +++ b/gcc/cp/cp-gimplify.c @@ -30,6 +30,7 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA #include "toplev.h" #include "tree-gimple.h" #include "hashtab.h" +#include "pointer-set.h" /* Genericize a TRY_BLOCK. */ @@ -274,8 +275,7 @@ static tree cp_genericize_r (tree *stmt_p, int *walk_subtrees, void *data) { tree stmt = *stmt_p; - htab_t htab = (htab_t) data; - void **slot; + struct pointer_set_t *p_set = (struct pointer_set_t*) data; if (is_invisiref_parm (stmt)) { @@ -285,8 +285,7 @@ cp_genericize_r (tree *stmt_p, int *walk_subtrees, void *data) } /* Other than invisiref parms, don't walk the same tree twice. */ - slot = htab_find_slot (htab, stmt, INSERT); - if (*slot) + if (pointer_set_insert (p_set, stmt)) { *walk_subtrees = 0; return NULL_TREE; @@ -310,13 +309,15 @@ cp_genericize_r (tree *stmt_p, int *walk_subtrees, void *data) to lower this construct before scanning it, so we need to lower these before doing anything else. */ else if (TREE_CODE (stmt) == CLEANUP_STMT) - *stmt_p = build2 (CLEANUP_EH_ONLY (stmt) ? TRY_CATCH_EXPR - : TRY_FINALLY_EXPR, - void_type_node, - CLEANUP_BODY (stmt), - CLEANUP_EXPR (stmt)); - - *slot = *stmt_p; + { + *stmt_p = build2 (CLEANUP_EH_ONLY (stmt) ? TRY_CATCH_EXPR + : TRY_FINALLY_EXPR, + void_type_node, + CLEANUP_BODY (stmt), + CLEANUP_EXPR (stmt)); + pointer_set_insert (p_set, *stmt_p); + } + return NULL; } @@ -324,7 +325,7 @@ void cp_genericize (tree fndecl) { tree t; - htab_t htab; + struct pointer_set_t *p_set; /* Fix up the types of parms passed by invisible reference. */ for (t = DECL_ARGUMENTS (fndecl); t; t = TREE_CHAIN (t)) @@ -356,9 +357,9 @@ cp_genericize (tree fndecl) /* We do want to see every occurrence of the parms, so we can't just use walk_tree's hash functionality. */ - htab = htab_create (37, htab_hash_pointer, htab_eq_pointer, NULL); - walk_tree (&DECL_SAVED_TREE (fndecl), cp_genericize_r, htab, NULL); - htab_delete (htab); + p_set = pointer_set_create (); + walk_tree (&DECL_SAVED_TREE (fndecl), cp_genericize_r, p_set, NULL); + pointer_set_destroy (p_set); /* Do everything else. */ c_genericize (fndecl); |