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

--- Comment #11 from Bernd Edlinger <bernd.edlinger at hotmail dot de> ---
But seriously:

  /* Avoid returning a string that doesn't fit in the array
     it is stored in, like
     const char a[4] = "abcde";
     but do handle those that fit even if they have excess
     initializers, such as in
     const char a[4] = "abc\000\000";
     The excess elements contribute to TREE_STRING_LENGTH()
     but not to strlen().  */
  unsigned HOST_WIDE_INT length
    = strnlen (TREE_STRING_POINTER (init), TREE_STRING_LENGTH (init));
  if (compare_tree_int (array_size, length + 1) < 0)
    return NULL_TREE;

this is supposed to prevent such optimizations,
however it looks like the ARRAY_REFs decay in later optimization
stages, so here it looks like the access is for an array[6] at
offset 0 with an inital value of length 3.

Reply via email to