This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug tree-optimization/47265] [4.6 Regression] Error: SSA name in freelist but still referenced


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=47265

--- Comment #5 from Jakub Jelinek <jakub at gcc dot gnu.org> 2011-01-25 10:27:41 UTC ---
Actually, there is a far easier fix.  Either add
  if (all && !has_zero_uses (name))
    all = false;
to the end of forward_propagate_addr_expr, or we could iterate some more,
either like this:
--- gcc/tree-ssa-forwprop.c.jj     2011-01-15 11:26:42.000000000 +0100
+++ gcc/tree-ssa-forwprop.c 2011-01-25 11:22:02.828495766 +0100
@@ -1061,6 +1061,8 @@ forward_propagate_addr_expr (tree name, 
   bool all = true;
   bool single_use_p = has_single_use (name);

+  do
+  {
   FOR_EACH_IMM_USE_STMT (use_stmt, iter, name)
     {
       bool result;
@@ -1113,6 +1115,7 @@ forward_propagate_addr_expr (tree name, 
          gsi_remove (&gsi, true);
        }
     }
+  } while (all && !has_zero_uses (name));

   return all;
 }

or say just once or say 4 times:
  int i;
  for (i = 0; i < 4; i++)
    {
      FOR_EACH_IMM_USE_STMT (use_stmt, iter, name)
        {
          ...
        }
      if (!all || has_zero_uses (name))
        return all;
    }
  return false;


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]