On 11/25/14 7:56, Joseph Myers wrote:
> On Sun, 23 Nov 2014, Chen Gang wrote:
>
>> + gcc_assert (wi::fits_to_tree_p(value, integer_type_node));
>
> Watch formatting: space before '(' in the wi::fits_to_tree_p call.
> Applies elsewhere in this patch as well.
>
OK, thanks, I shall notice next.
> When making such an interface change, (a) you should update the comment on
> builtin_define_with_int_value to explain the new interface, and (b) you
> should check existing callers to make sure their values are indeed in
> range, and describe the check you did.
>
> In fact, -fabi-version=0 results in __GXX_ABI_VERSION being defined to
> 999999 using builtin_define_with_int_value. That's out of range of int on
> targets with 16-bit int. So that indicates against requiring the value to
> be within range of int. It might however be OK to require the value to be
> within range of target long.
>
For me, can let builtin_define_with_int_value() fit all kinds of integer
values, and the assert need be:
gcc_assert (wi::fits_to_tree_p (value, char_type_node)
|| wi::fits_to_tree_p (value, short_integer_type_node)
|| wi::fits_to_tree_p (value, integer_type_node)
|| wi::fits_to_tree_p (value, long_integer_type_node)
|| wi::fits_to_tree_p (value, long_long_integer_type_node));
If it really can fit all kinds of integer values, for me, the related
comments of builtin_define_with_int_value() need not be changed.
>> + if (value >= 0)
>> + {
>> + sprintf (buf, "%s="HOST_WIDE_INT_PRINT_DEC"%s",
>> + macro, value,
>> + value <= HOST_INT_MAX
>> + ? ""
>> + : value <= HOST_LONG_MAX
>> + ? "L" : "LL");
>
> Limits on the host's int and long are completely irrelevant here. The
> question is the target's int and long, not the host's - and consistency
> indicates checking with wi::fits_to_tree_p (value, integer_type_node) if
> the assertion checked with long_integer_type_node.
>
OK, thanks. And for me, the related sprintf() should be:
sprintf (buf, "%s=%s"HOST_WIDE_INT_PRINT_DEC"%s%s",
macro,
value < 0 ? "(" : "",
value,
wi::fits_to_tree_p (value, char_type_node)
|| wi::fits_to_tree_p (value, short_integer_type_node)
|| wi::fits_to_tree_p (value, integer_type_node)
? ""
: wi::fits_to_tree_p (value, long_integer_type_node)
? "L" : "LL",
value < 0 ? ")" : "");
Thanks.
--
Chen Gang
Open, share, and attitude like air, water, and life which God blessed