On 11/26/2013 06:54 AM, Michael S. Tsirkin wrote:
>>>>> +    char s[] = "XXXX";
>>>>
>>>> char s[5];
>>>>
>>
>> Then do something like
>>
>>   char s[sizeof("XXXX")];
>>
>> so that the actual initialization doesn't happen.
> Why? As an optimization?

How about failing to pessimize?

With your initialization you're forcing the compiler to do:

  char s[5];
  memcpy(s, "XXXX\0", 5);

possibly with the memcpy expanded inline.

Since we pass the address of S to vnsprintf, the compiler has to assume that
memory is read, and thus the initialization is needed.  It can never be
optimized away.

> I'm not quite sure this doesn't mean we are using VLA which I'd rather not.
> Would need to look at language spec ... simple initialization is shorter
> and more obviously correct.

I'm quite sure that using sizeof does not imply a VLA.



r~

Reply via email to