https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114713
Richard Biener <rguenth at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Version|unknown |14.0
CC| |rguenth at gcc dot gnu.org
--- Comment #1 from Richard Biener <rguenth at gcc dot gnu.org> ---
[] and [0] are not the same. Note the C and C++ frontends encode [0] (or did
encode) differently.
See tree.cc:gimple_canonical_types_compatible_p
I agree that from a QOI perspective [] and [0] should be compatible.
Note [0] can have many "equivalent" domains, [3:2], [0:-1], [1:0], etc.
but the current code has
/* Array types are the same if the element types are the same and
the number of elements are the same. */
...
/* The minimum/maximum values have to be the same. */
if ((min1 == min2
|| (min1 && min2
which is somewhat contradicting comments.
See also layout_type which says, when computing TYPE_SIZE of an array:
/* ??? We have no way to distinguish a null-sized array from an
array spanning the whole sizetype range, so we arbitrarily
decide that [0, -1] is the only valid representation. */
if (integer_zerop (length)
&& TREE_OVERFLOW (length)
&& integer_zerop (lb))
length = size_zero_node;
revealing that the constraints on TYPE_DOMAIN are not very well specified.