> C/C++ empty arrays (int a[0]) now use a signed TYPE_DOMAIN with bounds [0,
> -1] for example (that was my original motivation to make hopefully all of
> the middle-end
> work with ssizetype TYPE_DOMAINs at least).  The tree.c range-type build
> helpers accept all integral types now (but most FEs use sizetype or
> ssizetype).

Using ssizetype in Ada would already be a net progress, I'll investigate.

> ISTR also doing some Ada adjustments but they may have been dumped for
> "interesting" changes to stor-layout.c instead:
> 
>                 /* ???  When it is obvious that the range is signed
>                    represent it using ssizetype.  */
>                 if (TREE_CODE (lb) == INTEGER_CST
>                     && TREE_CODE (ub) == INTEGER_CST
>                     && TYPE_UNSIGNED (TREE_TYPE (lb))
>                     && tree_int_cst_lt (ub, lb))
>                   {
>                     lb = wide_int_to_tree (ssizetype,
>                                            offset_int::from (lb, SIGNED));
>                     ub = wide_int_to_tree (ssizetype,
>                                            offset_int::from (ub, SIGNED));
>                   }
>                 length
>                   = fold_convert (sizetype,
>                                   size_binop (PLUS_EXPR,
>                                               build_int_cst (TREE_TYPE (lb),
> 1), size_binop (MINUS_EXPR, ub, lb))); }
> 
>             /* ??? 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;

IIRC the first one is yours and the second one is mine. :-)  But, yes, they 
clearly should go and be replaced by changes in gigi.

-- 
Eric Botcazou

Reply via email to