On Wed, Sep 21, 2016 at 04:39:42PM -0600, Martin Sebor wrote:
> diff --git a/gcc/gimple-ssa-sprintf.c b/gcc/gimple-ssa-sprintf.c
> index dddb026..652d3fb 100644
> --- a/gcc/gimple-ssa-sprintf.c
> +++ b/gcc/gimple-ssa-sprintf.c
> @@ -210,8 +210,8 @@ struct format_result
>  static HOST_WIDE_INT
>  target_int_min ()
>  {
> -  static const unsigned HOST_WIDE_INT int_min
> -    = 1LLU << (sizeof int_min * CHAR_BIT
> +  const unsigned HOST_WIDE_INT int_min
> +    = 1LLU << (HOST_BITS_PER_WIDE_INT

1LLU should be really HOST_WIDE_INT_1U

>              - TYPE_PRECISION (integer_type_node) + 1);

Is the shift amount really what you mean?
HOST_BITS_PER_WIDE_INT - TYPE_PRECISION (integer_type_node) + 1
is usually 33 (or 17 or 9 in much rarer cases), so that is
0x200000000ULL.  Don't you want instead
  = HOST_WIDE_INT_1U << (TYPE_PRECISION (ingeger_type_node) - 1);
so that it will be
0x80000000ULL?

> @@ -221,8 +221,8 @@ target_int_min ()
>  static unsigned HOST_WIDE_INT
>  target_int_max ()
>  {
> -  static const unsigned HOST_WIDE_INT int_max
> -    = HOST_WIDE_INT_M1U >> (sizeof int_max * CHAR_BIT
> +  const unsigned HOST_WIDE_INT int_max
> +    = HOST_WIDE_INT_M1U >> (HOST_BITS_PER_WIDE_INT
>                           - TYPE_PRECISION (integer_type_node) + 1);
>    return int_max;
>  }

This is expectedly -1ULL >> 33, i.e. 0x7fffffffULL, which looks ok.

        Jakub

Reply via email to