@@ -1,5 +1,5 @@
/* Coalesce SSA_NAMES together for the out-of-ssa pass.
- Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
+ Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
Free Software Foundation, Inc.
Contributed by Andrew MacLeod <amacleod@redhat.com>
@@ -1292,7 +1292,6 @@ coalesce_ssa_name (void)
bitmap used_in_copies = BITMAP_ALLOC (NULL);
var_map map;
unsigned int i;
- static hash_table <ssa_name_var_hash> ssa_name_hash;
cl = create_coalesce_list ();
map = create_outofssa_var_map (cl, used_in_copies);
@@ -1301,6 +1300,8 @@ coalesce_ssa_name (void)
so debug info remains undisturbed. */
if (!optimize)
{
+ hash_table <ssa_name_var_hash> ssa_name_hash;
+
ssa_name_hash.create (10);
for (i = 1; i < num_ssa_names; i++)
{
@@ -6567,6 +6567,9 @@ finish_struct (tree t, tree attributes)
return t;
}
+/* Hash table to avoid endless recursion when handling references. */
+static hash_table <pointer_hash <tree_node> > fixed_type_or_null_ref_ht;
+
/* Return the dynamic type of INSTANCE, if known.
Used to determine whether the virtual function table is needed
or not.
@@ -6682,9 +6685,8 @@ fixed_type_or_null (tree instance, int *
else if (TREE_CODE (TREE_TYPE (instance)) == REFERENCE_TYPE)
{
/* We only need one hash table because it is always left empty. */
- static hash_table <pointer_hash <tree_node> > ht;
- if (!ht.is_created ())
- ht.create (37);
+ if (!fixed_type_or_null_ref_ht.is_created ())
+ fixed_type_or_null_ref_ht.create (37);
/* Reference variables should be references to objects. */
if (nonnull)
@@ -6696,15 +6698,15 @@ fixed_type_or_null (tree instance, int *
if (TREE_CODE (instance) == VAR_DECL
&& DECL_INITIAL (instance)
&& !type_dependent_expression_p_push (DECL_INITIAL (instance))
- && !ht.find (instance))
+ && !fixed_type_or_null_ref_ht.find (instance))
{
tree type;
tree_node **slot;
- slot = ht.find_slot (instance, INSERT);
+ slot = fixed_type_or_null_ref_ht.find_slot (instance, INSERT);
*slot = instance;
type = RECUR (DECL_INITIAL (instance));
- ht.remove_elt (instance);
+ fixed_type_or_null_ref_ht.remove_elt (instance);
return type;
}