https://gcc.gnu.org/bugzilla/show_bug.cgi?id=69399

H.J. Lu <hjl.tools at gmail dot com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|NEW                         |RESOLVED
         Resolution|---                         |DUPLICATE

--- Comment #5 from H.J. Lu <hjl.tools at gmail dot com> ---
wide-int.h has

/* Return X >> Y, using a logical shift.  Return 0 if Y is greater than
   or equal to the precision of X.  */
template <typename T1, typename T2>
inline WI_UNARY_RESULT (T1)
wi::lrshift (const T1 &x, const T2 &y)
{
  WI_UNARY_RESULT_VAR (result, val, T1, x);
  /* Do things in the precision of the input rather than the output,
     since the result can be no larger than that.  */
  WIDE_INT_REF_FOR (T1) xi (x);
  WIDE_INT_REF_FOR (T2) yi (y);
  /* Handle the simple cases quickly.   */
  if (geu_p (yi, xi.precision))
    {
      val[0] = 0;
      result.set_len (1);
    }
  else
    {
      unsigned int shift = yi.to_uhwi ();
      /* For fixed-precision integers like offset_int and widest_int,
         handle the case where the shift value is constant and the
         shifted value is a single nonnegative HWI (meaning that all
         bits above the HWI are zero).  This is particularly common
         for converting a bit count to a byte count.

         For variable-precision integers like wide_int, handle HWI
         and sub-HWI integers inline.  */
      if (STATIC_CONSTANT_P (xi.precision > HOST_BITS_PER_WIDE_INT)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

This is miscompiled due to PR 65656.

          ? xi.len == 1 && xi.val[0] >= 0
          : xi.precision <= HOST_BITS_PER_WIDE_INT)
        {
          val[0] = xi.to_uhwi () >> shift;
          result.set_len (1);
        }
      else
        result.set_len (lrshift_large (val, xi.val, xi.len, xi.precision,
                                       get_precision (result), shift));
    }
  return result;
}

*** This bug has been marked as a duplicate of bug 65656 ***

Reply via email to