On 02.08.2020 16:44, Taylor R Campbell wrote: >> Date: Sun, 2 Aug 2020 16:04:15 +0200 >> From: Kamil Rytarowski <[email protected]> >> >> On 02.08.2020 15:57, Taylor R Campbell wrote: >>> But it sounds like the original motivation is that it triggered >>> -Wvla...which frankly strikes me as a compiler bug since there's >>> obviously no actual VLA created in sizeof; as far as I can tell >>> there's no semantic difference between sizeof(device_t[n]) and >>> sizeof(device_t) * n. >> >> This is not true: > > Which part of what I said are you claiming is not true, and what are > you illustrating with the example program below? >
Calling it a compiler bug.
Clang behaves the same way.
$ clang -Wvla test.c
test.c:6:37: warning: variable length array used [-Wvla]
printf("sizeof = %zu\n", sizeof(int[argc]));
^
1 warning generated.
Creating VLA is not needed for using it as an intermediate. In practice
in most/all cases it is optimized and actual VLA is not allocated.
> It seems to illustrate that sizeof(int[argc]) does exactly what one
> would expect it to do -- return the size of an argc-length array of
> ints, just like sizeof(int) * argc does.
>
>
The result is the same and I find the change as beneficial.
>
>> #include <stdio.h>
>>
>> int
>> main(int argc, char **argv)
>> {
>> printf("sizeof = %zu\n", sizeof(int[argc]));
>> return 0;
>> }
>>
>> $ ./a.out
>>
>> sizeof = 4
>> $ ./a.out 12 3
>> sizeof = 12
>> $ ./a.out 12 3 45 6
>> sizeof = 20
signature.asc
Description: OpenPGP digital signature
