On Sun, 2 Aug 2020, Kamil Rytarowski wrote:

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:

#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

Modifying your example slightly, I print both variations:

#include <stdio.h>

int
main(int argc, char **argv)
{
        printf("sizeof = %zu\t%zu\n", sizeof(int[argc]), sizeof(int) * argc);
        return 0;
}
speedy:paul {653} ./a.out
sizeof = 4      4
speedy:paul {654} ./a.out 12 3
sizeof = 12     12
speedy:paul {655} ./a.out 12 3 45 6
sizeof = 20     20


Looks the same to me!


+--------------------+--------------------------+-----------------------+
| Paul Goyette       | PGP Key fingerprint:     | E-mail addresses:     |
| (Retired)          | FA29 0E3B 35AF E8AE 6651 | p...@whooppee.com     |
| Software Developer | 0786 F758 55DE 53BA 7731 | pgoye...@netbsd.org   |
+--------------------+--------------------------+-----------------------+

Reply via email to