This is the first of 8 patches from reading through the diff with mainline.
Some places had an off-by-one error on an index and some used "<= 0"
instead of ">= 0".

I think we should use MAX_BITSIZE_MODE_ANY_MODE rather than
MAX_BITSIZE_MODE_ANY_INT when handling floating-point modes.

Two hunks contain unrelated formatting fixes too.

Tested on x86_64-linux-gnu.  OK to install?

Thanks,
Richard

Index: gcc/c-family/c-ada-spec.c
===================================================================
--- gcc/c-family/c-ada-spec.c   2014-04-22 20:31:10.632895953 +0100
+++ gcc/c-family/c-ada-spec.c   2014-04-22 20:31:24.880998602 +0100
@@ -2205,8 +2205,9 @@ dump_generic_ada_node (pretty_printer *b
              val = -val;
            }
          sprintf (pp_buffer (buffer)->digit_buffer,
-                  "16#%" HOST_WIDE_INT_PRINT "x", val.elt (val.get_len () - 
1));
-         for (i = val.get_len () - 2; i <= 0; i--)
+                  "16#%" HOST_WIDE_INT_PRINT "x",
+                  val.elt (val.get_len () - 1));
+         for (i = val.get_len () - 2; i >= 0; i--)
            sprintf (pp_buffer (buffer)->digit_buffer,
                     HOST_WIDE_INT_PRINT_PADDED_HEX, val.elt (i));
          pp_string (buffer, pp_buffer (buffer)->digit_buffer);
Index: gcc/dbxout.c
===================================================================
--- gcc/dbxout.c        2014-04-22 20:31:10.632895953 +0100
+++ gcc/dbxout.c        2014-04-22 20:31:24.881998608 +0100
@@ -720,7 +720,7 @@ stabstr_O (tree cst)
     }
 
   prec -= res_pres;
-  for (i = prec - 3; i <= 0; i = i - 3)
+  for (i = prec - 3; i >= 0; i = i - 3)
     {
       digit = wi::extract_uhwi (cst, i, 3);
       stabstr_C ('0' + digit);
Index: gcc/dwarf2out.c
===================================================================
--- gcc/dwarf2out.c     2014-04-22 20:31:10.632895953 +0100
+++ gcc/dwarf2out.c     2014-04-22 20:31:24.884998630 +0100
@@ -1847,7 +1847,7 @@ output_loc_operands (dw_loc_descr_ref lo
            int i;
            int len = get_full_len (*val2->v.val_wide);
            if (WORDS_BIG_ENDIAN)
-             for (i = len; i >= 0; --i)
+             for (i = len - 1; i >= 0; --i)
                dw2_asm_output_data (HOST_BITS_PER_WIDE_INT / 
HOST_BITS_PER_CHAR,
                                     val2->v.val_wide->elt (i), NULL);
            else
@@ -2073,7 +2073,7 @@ output_loc_operands (dw_loc_descr_ref lo
 
              dw2_asm_output_data (1, len * l, NULL);
              if (WORDS_BIG_ENDIAN)
-               for (i = len; i >= 0; --i)
+               for (i = len - 1; i >= 0; --i)
                  dw2_asm_output_data (l, val2->v.val_wide->elt (i), NULL);
              else
                for (i = 0; i < len; ++i)
@@ -5398,11 +5398,11 @@ print_die (dw_die_ref die, FILE *outfile
            int i = a->dw_attr_val.v.val_wide->get_len ();
            fprintf (outfile, "constant (");
            gcc_assert (i > 0);
-           if (a->dw_attr_val.v.val_wide->elt (i) == 0)
+           if (a->dw_attr_val.v.val_wide->elt (i - 1) == 0)
              fprintf (outfile, "0x");
            fprintf (outfile, HOST_WIDE_INT_PRINT_HEX,
                     a->dw_attr_val.v.val_wide->elt (--i));
-           while (-- i >= 0)
+           while (--i >= 0)
              fprintf (outfile, HOST_WIDE_INT_PRINT_PADDED_HEX,
                       a->dw_attr_val.v.val_wide->elt (i));
            fprintf (outfile, ")");
@@ -8723,7 +8723,7 @@ output_die (dw_die_ref die)
                                   NULL);
 
            if (WORDS_BIG_ENDIAN)
-             for (i = len; i >= 0; --i)
+             for (i = len - 1; i >= 0; --i)
                {
                  dw2_asm_output_data (l, a->dw_attr_val.v.val_wide->elt (i),
                                       name);
Index: gcc/simplify-rtx.c
===================================================================
--- gcc/simplify-rtx.c  2014-04-22 20:31:10.632895953 +0100
+++ gcc/simplify-rtx.c  2014-04-22 20:31:24.884998630 +0100
@@ -5395,7 +5395,7 @@ simplify_immed_subreg (enum machine_mode
        case MODE_DECIMAL_FLOAT:
          {
            REAL_VALUE_TYPE r;
-           long tmp[MAX_BITSIZE_MODE_ANY_INT / 32];
+           long tmp[MAX_BITSIZE_MODE_ANY_MODE / 32];
 
            /* real_from_target wants its input in words affected by
               FLOAT_WORDS_BIG_ENDIAN.  However, we ignore this,

Reply via email to