Bootstrap and regtest running on x86_64-unknown-linux-gnu.

Richard.

2019-04-24  Richard Biener  <rguent...@suse.de>

        PR middle-end/90213
        * gimple-fold.c (fold_const_aggregate_ref_1): Do multiplication
        by size and BITS_PER_UNIT on poly-wide-ints.

Index: gcc/gimple-fold.c
===================================================================
--- gcc/gimple-fold.c   (revision 270537)
+++ gcc/gimple-fold.c   (working copy)
@@ -6983,14 +6983,10 @@ fold_const_aggregate_ref_1 (tree t, tree
                = wi::sext (wi::to_poly_offset (idx)
                            - wi::to_poly_offset (low_bound),
                            TYPE_PRECISION (TREE_TYPE (idx)));
-
+             woffset *= tree_to_uhwi (unit_size);
+             woffset *= BITS_PER_UNIT;
              if (woffset.to_shwi (&offset))
                {
-                 /* TODO: This code seems wrong, multiply then check
-                    to see if it fits.  */
-                 offset *= tree_to_uhwi (unit_size);
-                 offset *= BITS_PER_UNIT;
-
                  base = TREE_OPERAND (t, 0);
                  ctor = get_base_constructor (base, &offset, valueize);
                  /* Empty constructor.  Always fold to 0.  */

Reply via email to