This is the mail archive of the gcc-patches@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]

[patch RFA middle-end] Fix PR middle-end/49220


Hi,

The attached is yet another create_pre_exit patch to fix
PR middle-end/49220 which is an ice-on-invalid-code.  It's for
non-void function which returns without value.  The patch is
tested with bootstrap and the top level "make -k check" on
i686-pc-linux-gnu with no new failures and regtested on cross
sh4-unknown-linux-gnu.

Regards,
	kaz
--
2012-11-07  Kaz Kojima  <kkojima@gcc.gnu.org>

	PR middle-end/49220
	* mode-switching.c (create_pre_exit): Set short_block if there
	are no copy insns.

--- ORIG/trunk/gcc/mode-switching.c	2012-11-06 07:33:20.000000000 +0900
+++ trunk/gcc/mode-switching.c	2012-11-07 07:55:25.000000000 +0900
@@ -322,7 +322,14 @@ create_pre_exit (int n_entities, int *en
 			     && GET_CODE (SUBREG_REG (copy_reg)) == REG)
 		      copy_start = REGNO (SUBREG_REG (copy_reg));
 		    else
-		      break;
+		      {
+			/* When control reaches end of non-void function,
+			   there are no return copy insns at all.  This
+			   avoids an ice on that invalid function.  */
+			if (ret_start + nregs == ret_end)
+			  short_block = 1;
+			break;
+		      }
 		    if (copy_start >= FIRST_PSEUDO_REGISTER)
 		      break;
 		    copy_num


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