One more POINTERS_EXTEND_UNSIGNED fix in mem_loc_descriptor.
authorH.J. Lu <hongjiu.lu@intel.com>
Mon, 9 May 2011 18:16:04 +0000 (18:16 +0000)
committerH.J. Lu <hjl@gcc.gnu.org>
Mon, 9 May 2011 18:16:04 +0000 (11:16 -0700)
2011-05-09  H.J. Lu  <hongjiu.lu@intel.com>

PR debug/48853
* dwarf2out.c (mem_loc_descriptor) <case SUBREG>: If
POINTERS_EXTEND_UNSIGNED is defined, don't give up if mode is
Pmode and mem_mode is not VOIDmode.

From-SVN: r173587

gcc/ChangeLog
gcc/dwarf2out.c

index 6406136d7e99b3a4c3b6df19d5f1fd885c4f77e4..bf217bd34378cca25b84806d5b17dfecdcf78b0e 100644 (file)
@@ -1,3 +1,10 @@
+2011-05-09  H.J. Lu  <hongjiu.lu@intel.com>
+
+       PR debug/48853
+       * dwarf2out.c (mem_loc_descriptor) <case SUBREG>: If
+       POINTERS_EXTEND_UNSIGNED is defined, don't give up if mode is
+       Pmode and mem_mode is not VOIDmode.
+
 2011-05-08  Ville Voutilainen  <ville.voutilainen@gmail.com>
 
        * tree.h (TYPE_UNQUALIFIED, TYPE_QUAL_CONST): Convert to enum.
index c08f5aac614e873e9bf92a3124925e3e8818c4dc..b85a55ec67c9ec8e93b5a7821172782cd0483f0c 100644 (file)
@@ -13880,7 +13880,11 @@ mem_loc_descriptor (rtx rtl, enum machine_mode mode,
        break;
       if (GET_MODE_CLASS (mode) == MODE_INT
          && GET_MODE_CLASS (GET_MODE (SUBREG_REG (rtl))) == MODE_INT
-         && GET_MODE_SIZE (mode) <= DWARF2_ADDR_SIZE
+         && (GET_MODE_SIZE (mode) <= DWARF2_ADDR_SIZE
+#ifdef POINTERS_EXTEND_UNSIGNED
+             || (mode == Pmode && mem_mode != VOIDmode)
+#endif
+            )
          && GET_MODE_SIZE (GET_MODE (SUBREG_REG (rtl))) <= DWARF2_ADDR_SIZE)
        {
          mem_loc_result = mem_loc_descriptor (SUBREG_REG (rtl),