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

--- Comment #3 from Richard Biener <rguenth at gcc dot gnu.org> ---
OK, that's a reasonable stance give we have VL vectors.  I'll note that
previously build_vector looked like the following, so TREE_OVERFLOW was
set according to the encoded elements.  Now that's no longer the case.
I'll post a patch for comments.


/* Return a new VECTOR_CST node whose type is TYPE and whose values
   are in a list pointed to by VALS.  */

tree
build_vector_stat (tree type, tree *vals MEM_STAT_DECL)
{
  int over = 0;
  unsigned cnt = 0;
  tree v = make_vector (TYPE_VECTOR_SUBPARTS (type));
  TREE_TYPE (v) = type;

  /* Iterate through elements and check for overflow.  */
  for (cnt = 0; cnt < TYPE_VECTOR_SUBPARTS (type); ++cnt)
    {
      tree value = vals[cnt];

      VECTOR_CST_ELT (v, cnt) = value;

      /* Don't crash if we get an address constant.  */
      if (!CONSTANT_CLASS_P (value))
        continue;

      over |= TREE_OVERFLOW (value);
    }

  TREE_OVERFLOW (v) = over;
  return v;

Reply via email to