re PR debug/41236 (RTL checking failure compiling libgcc)
authorJakub Jelinek <jakub@redhat.com>
Thu, 3 Sep 2009 16:33:27 +0000 (18:33 +0200)
committerJakub Jelinek <jakub@gcc.gnu.org>
Thu, 3 Sep 2009 16:33:27 +0000 (18:33 +0200)
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.

From-SVN: r151385

gcc/ChangeLog
gcc/dwarf2out.c

index a4e3758bf0064c1c3c6a2a39598beb117e1a9ca1..0f5facee807110f8df01793142dfd0b76618acd6 100644 (file)
@@ -1,5 +1,10 @@
 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.
+
        PR debug/41238
        * function.c (assign_parm_find_stack_rtl): Don't set mem attributes on
        the stack slot if it is passed by invisible reference.
index 453e5e9fbc889c17a3bd38a14f68657521cf3073..62459e237f3f6fbe6869737488389a5f028cbdef 100644 (file)
@@ -11671,21 +11671,23 @@ loc_descriptor (rtx rtl, enum machine_mode mode,
   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);