tree-parloops.c (separate_decls_in_region_debug_bind): Drop debug stmts setting DEBUG...
authorJakub Jelinek <jakub@redhat.com>
Wed, 14 Oct 2009 17:05:45 +0000 (19:05 +0200)
committerJakub Jelinek <jakub@gcc.gnu.org>
Wed, 14 Oct 2009 17:05:45 +0000 (19:05 +0200)
* tree-parloops.c (separate_decls_in_region_debug_bind): Drop debug
stmts setting DEBUG_EXPR_DECLs.

* cfgexpand.c (expand_debug_expr): Ignore zero-length bitfields.
Don't crash if mode1 is VOIDmode.

From-SVN: r152772

gcc/ChangeLog
gcc/cfgexpand.c
gcc/tree-parloops.c

index 79906ed..2f653f9 100644 (file)
@@ -1,3 +1,11 @@
+2009-10-14  Jakub Jelinek  <jakub@redhat.com>
+
+       * tree-parloops.c (separate_decls_in_region_debug_bind): Drop debug
+       stmts setting DEBUG_EXPR_DECLs.
+
+       * cfgexpand.c (expand_debug_expr): Ignore zero-length bitfields.
+       Don't crash if mode1 is VOIDmode.
+
 2009-09-26  Vladimir Makarov  <vmakarov@redhat.com>
 
        * params.def (PARAM_IRA_LOOP_RESERVED_REGS): New.
index 6882954..4f317d9 100644 (file)
@@ -2524,6 +2524,9 @@ expand_debug_expr (tree exp)
                                        &mode1, &unsignedp, &volatilep, false);
        rtx orig_op0;
 
+       if (bitsize == 0)
+         return NULL;
+
        orig_op0 = op0 = expand_debug_expr (tem);
 
        if (!op0)
@@ -2561,6 +2564,9 @@ expand_debug_expr (tree exp)
 
        if (MEM_P (op0))
          {
+           if (mode1 == VOIDmode)
+             /* Bitfield.  */
+             mode1 = smallest_mode_for_size (bitsize, MODE_INT);
            if (bitpos >= BITS_PER_UNIT)
              {
                op0 = adjust_address_nv (op0, mode1, bitpos / BITS_PER_UNIT);
@@ -2568,7 +2574,8 @@ expand_debug_expr (tree exp)
              }
            else if (bitpos < 0)
              {
-               int units = (-bitpos + BITS_PER_UNIT - 1) / BITS_PER_UNIT;
+               HOST_WIDE_INT units
+                 = (-bitpos + BITS_PER_UNIT - 1) / BITS_PER_UNIT;
                op0 = adjust_address_nv (op0, mode1, units);
                bitpos += units * BITS_PER_UNIT;
              }
index 12b4ac0..681e046 100644 (file)
@@ -715,6 +715,8 @@ separate_decls_in_region_debug_bind (gimple stmt,
   void **slot, **dslot;
 
   var = gimple_debug_bind_get_var (stmt);
+  if (TREE_CODE (var) == DEBUG_EXPR_DECL)
+    return true;
   gcc_assert (DECL_P (var) && SSA_VAR_P (var));
   ielt.uid = DECL_UID (var);
   dslot = htab_find_slot_with_hash (decl_copies, &ielt, ielt.uid, NO_INSERT);