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

Reply via email to