[Bug tree-optimization/21380] [4.0 Regression] ICE compiling with -O

Jeffrey A Law law@redhat.com
Fri May 6 16:44:00 GMT 2005


FYI, after bootstrapping and regression testing  on i686-pc-linux-gnu
I applied the same patch used for the 4.0 branch to the mainline.

Jeff
-------------- next part --------------
	PR tree-optimization/21380
	* tree-ssa-threadupdate.c (thread_through_all_blocks): Do not
	thread through a block with no preds.

 	* gcc.c-torture/compile/pr21380.c: New test.

Index: tree-ssa-threadupdate.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/tree-ssa-threadupdate.c,v
retrieving revision 2.20
diff -c -p -r2.20 tree-ssa-threadupdate.c
*** tree-ssa-threadupdate.c	27 Jan 2005 18:22:22 -0000	2.20
--- tree-ssa-threadupdate.c	6 May 2005 02:54:49 -0000
*************** thread_through_all_blocks (void)
*** 560,566 ****
  
    FOR_EACH_BB (bb)
      {
!       if (bb_ann (bb)->incoming_edge_threaded)
  	{
  	  thread_block (bb);
  	  retval = true;
--- 560,567 ----
  
    FOR_EACH_BB (bb)
      {
!       if (bb_ann (bb)->incoming_edge_threaded
! 	  && EDGE_COUNT (bb->preds) > 0)
  	{
  	  thread_block (bb);
  	  retval = true;

Index: testsuite/gcc.c-torture/compile/pr21380.c
===================================================================
RCS file: testsuite/gcc.c-torture/compile/pr21380.c
diff -N testsuite/gcc.c-torture/compile/pr21380.c
*** /dev/null	1 Jan 1970 00:00:00 -0000
--- testsuite/gcc.c-torture/compile/pr21380.c	6 May 2005 02:55:06 -0000
***************
*** 0 ****
--- 1,42 ----
+ void bar (void);
+                                                                                 
+ void
+ foo (int *diff)
+ {
+   double deltay = 0.0;
+   int Stangent = 0;
+   int mindiff;
+   int Sflipped = 0;
+   int i;
+   int Sturn, Snofit;
+                                                                                 
+   Sturn = 1;
+   if (Sturn)
+     Stangent = 1;
+   if (Sturn)
+     {
+       Sflipped = 0;
+       Snofit = 1;
+       while (Snofit)
+         {
+           Snofit = 0;
+           mindiff = 0;
+           for (i = 0; i < 4; i++)
+             mindiff = diff[i];
+           while (!Snofit && (mindiff < 0.0))
+             {
+               deltay = (Stangent ? deltay : 0.0);
+               if (deltay < 0.0)
+                 Snofit = 1;
+               for (i = 0; i < 4; i++)
+                 {
+                 }
+             }
+           if (Snofit)
+             if (Sflipped)
+               break;
+         }
+       if (Snofit)
+         bar ();
+     }
+ }


More information about the Gcc-patches mailing list