[bootstrap-O1] change value type to avoid sprintf buffer size warning

Jeff Law law@redhat.com
Thu Jan 5 18:20:00 GMT 2017


On 01/04/2017 09:05 PM, Alexandre Oliva wrote:
> On Jan  4, 2017, Martin Sebor <msebor@gmail.com> wrote:
>
>> The manual recommends to use a length modifier to constrain the length
>> of output to that of a narrower type:
>
>>   sprintf (xname, "<U%4hx>", ((unsigned short)((uintptr_t)(t) & 0xffff)));
>
>> This should work even without optimization.
>
> It might not work if short happens to be wider than 16 bits, but I guess
> we need not worry about that at -O1.
>
> In stage2 of bootstrap-O1, the code that warns if sprintf might
> overflow its output buffer cannot tell that an unsigned value narrowed
> to 16 bits will fit in 4 bytes with %4x.
>
> Converting the value to 'unsigned short' makes it obvious that it
> fits, at least on machines with 16-bit shorts.
>
> Regstrapped on x86_64-linux-gnu and i686-linux-gnu.  Ok to install?
>
> for  gcc/c-family/ChangeLog
>
> 	* c-pretty-print.c (pp_c_tree_decl_identifier): Convert 16-bit
> 	value to unsigned short to fit in 4 hex digits without
> 	warnings.
OK.
jeff



More information about the Gcc-patches mailing list