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] Fix RTL checking bootstrap on i?86/x86_64-linux


Hi!

--enable-checking=yes,rtl bootstraps were ICEing, because loc_descriptor
used SUBREG_REG macro on SIGN_EXTEND or ZERO_EXTEND, and after fixing that
up it was ICEing because those don't necessarily contain a REG inside, could
have a MEM etc.

Fixed thusly, bootstrapped/regtested on x86_64-linux and i686-linux with
--enable-checking=yes,rtl, ok for trunk?

2009-09-03  Jakub Jelinek  <jakub@redhat.com>

	PR debug/41236
	* dwarf2out.c (loc_descriptor): Don't use SUBREG_REG macro on
	SIGN_EXTEND or ZERO_EXTEND.  Don't assume there is a REG inside of
	it or SUBREG.

--- gcc/dwarf2out.c.jj	2009-09-03 14:02:04.000000000 +0200
+++ gcc/dwarf2out.c	2009-09-03 14:58:45.000000000 +0200
@@ -11671,21 +11671,23 @@ loc_descriptor (rtx rtl, enum machine_mo
   switch (GET_CODE (rtl))
     {
     case SUBREG:
-    case SIGN_EXTEND:
-    case ZERO_EXTEND:
       /* The case of a subreg may arise when we have a local (register)
 	 variable or a formal (register) parameter which doesn't quite fill
 	 up an entire register.  For now, just assume that it is
 	 legitimate to make the Dwarf info refer to the whole register which
 	 contains the given subreg.  */
-      rtl = SUBREG_REG (rtl);
-
-      /* ... fall through ...  */
+      loc_result = loc_descriptor (SUBREG_REG (rtl), mode, initialized);
+      break;
 
     case REG:
       loc_result = reg_loc_descriptor (rtl, initialized);
       break;
 
+    case SIGN_EXTEND:
+    case ZERO_EXTEND:
+      loc_result = loc_descriptor (XEXP (rtl, 0), mode, initialized);
+      break;
+
     case MEM:
       loc_result = mem_loc_descriptor (XEXP (rtl, 0), GET_MODE (rtl),
 				       initialized);

	Jakub


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