Am Mittwoch, dem 06.12.2023 um 14:34 +0100 schrieb Martin Uecker: > Am Mittwoch, dem 06.12.2023 um 13:57 +0100 schrieb Jakub Jelinek: > > On Wed, Dec 06, 2023 at 08:31:12PM +0800, Xi Ruoyao wrote: > > > On Wed, 2023-12-06 at 13:24 +0100, Jakub Jelinek wrote: > > > > I wonder if this part isn't too pedantic or more of a code style. > > > > Some packages fail to build with this with -Werror because they do > > > > struct S *p = calloc (sizeof (struct S), 1); > > > > or similar. It is true that calloc arguments are documented to be > > > > nmemb, size, but given sufficient alignment (which is not really > > > > different > > > > between either order of arguments) isn't it completely valid to allocate > > > > char array with sizeof (struct S) elements and then store a struct S > > > > object > > > > into it? > > > > > > In PR112364 Martin Uecker has pointed out the alignment may be different > > > with the different order of arguments, per C23 (N2293). With earlier > > > versions of the standard some people believe the alignment should not be > > > different, while the other people disagree (as the text is not very > > > clear). > > > > I can understand implementations which use smaller alignment based on > > allocation size, but are there any which consider for that just the second > > calloc argument rather than the product of both arguments? > > Not that I know of. > > > I think they'd quickly break a lot of real-world code. > > There are quite a few projects which use calloc with swapped > arguments. > > > Further I think > > "size less than or equal to the size requested" > > is quite ambiguous in the calloc case, isn't the size requested in the > > calloc case actually nmemb * size rather than just size? > > This is unclear but it can be understood this way. > This was also Joseph's point. > > I am happy to submit a patch that changes the code so > that the swapped arguments to calloc do not cause a warning > anymore. > > On the other hand, the only feedback I got so far was > from people who were then happy to get this warning.
Note that it is now -Wextra.