On 02.08.2020 16:25, Paul Goyette wrote: > 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! > The result is the same, but one uses VLA (at least formally), other not. > > +--------------------+--------------------------+-----------------------+ > | Paul Goyette | PGP Key fingerprint: | E-mail addresses: | > | (Retired) | FA29 0E3B 35AF E8AE 6651 | paul%whooppee.com@localhost | > | Software Developer | 0786 F758 55DE 53BA 7731 | pgoyette%netbsd.org@localhost | > +--------------------+--------------------------+-----------------------+
Attachment:
signature.asc
Description: OpenPGP digital signature