dwarf2out.c (mem_loc_descriptor): Compare mode size instead of bitsize with DWARF2_AD...
authorJakub Jelinek <jakub@redhat.com>
Fri, 25 Mar 2011 16:22:00 +0000 (17:22 +0100)
committerJakub Jelinek <jakub@gcc.gnu.org>
Fri, 25 Mar 2011 16:22:00 +0000 (17:22 +0100)
* dwarf2out.c (mem_loc_descriptor) <case ZERO_EXTRACT>: Compare
mode size instead of bitsize with DWARF2_ADDR_SIZE.
(hash_loc_operands, compare_loc_operands): Handle
DW_OP_GNU_entry_value.

From-SVN: r171464

gcc/ChangeLog
gcc/dwarf2out.c

index 827a662890593ab3e4bfee19d65072b6f091378b..62299ae1a02da58c6c75c44964cd2354112f0de0 100644 (file)
@@ -1,3 +1,10 @@
+2011-03-25  Jakub Jelinek  <jakub@redhat.com>
+
+       * dwarf2out.c (mem_loc_descriptor) <case ZERO_EXTRACT>: Compare
+       mode size instead of bitsize with DWARF2_ADDR_SIZE.
+       (hash_loc_operands, compare_loc_operands): Handle
+       DW_OP_GNU_entry_value.
+
 2011-03-25  Kai Tietz  <ktietz@redhat.com>
 
        * config/i386/cygming.h (DWARF_FRAME_REGISTERS): Adjust comment.
index e57b9a1a0ea2bbcc00598d50f5fea5f3e789edaa..77d533eb8fbde7f4c6792ab7349ef02b7b88387c 100644 (file)
@@ -14314,8 +14314,8 @@ mem_loc_descriptor (rtx rtl, enum machine_mode mode,
          && ((unsigned) INTVAL (XEXP (rtl, 1))
              + (unsigned) INTVAL (XEXP (rtl, 2))
              <= GET_MODE_BITSIZE (GET_MODE (rtl)))
-         && GET_MODE_BITSIZE (GET_MODE (rtl)) <= DWARF2_ADDR_SIZE
-         && GET_MODE_BITSIZE (GET_MODE (XEXP (rtl, 0))) <= DWARF2_ADDR_SIZE)
+         && GET_MODE_SIZE (GET_MODE (rtl)) <= DWARF2_ADDR_SIZE
+         && GET_MODE_SIZE (GET_MODE (XEXP (rtl, 0))) <= DWARF2_ADDR_SIZE)
        {
          int shift, size;
          op0 = mem_loc_descriptor (XEXP (rtl, 0), mode,
@@ -23128,6 +23128,9 @@ hash_loc_operands (dw_loc_descr_ref loc, hashval_t hash)
     case DW_OP_GNU_implicit_pointer:
       hash = iterative_hash_object (val2->v.val_int, hash);
       break;
+    case DW_OP_GNU_entry_value:
+      hash = hash_loc_operands (val1->v.val_loc, hash);
+      break;
 
     default:
       /* Other codes have no operands.  */
@@ -23285,6 +23288,8 @@ compare_loc_operands (dw_loc_descr_ref x, dw_loc_descr_ref y)
             && valx1->val_class == valy1->val_class
             && valx1->v.val_die_ref.die == valy1->v.val_die_ref.die
             && valx2->v.val_int == valy2->v.val_int;
+    case DW_OP_GNU_entry_value:
+      return compare_loc_operands (valx1->v.val_loc, valy1->v.val_loc);
     default:
       /* Other codes have no operands.  */
       return true;