Thread (18 messages) 18 messages, 7 authors, 2021-08-16

Re: [PATCH] checkpatch: prefer = {} initializations to = {0}

From: Dan Carpenter <hidden>
Date: 2021-08-16 06:56:41
Also in: lkml

On Sat, Aug 14, 2021 at 02:52:31PM +0000, Al Viro wrote:
On Sat, Aug 14, 2021 at 03:59:22PM +0200, Christophe JAILLET wrote:
quoted
quoted
+# prefer = {}; to = {0};
+		if ($line =~ /= \{ *0 *\}/) {
+			WARN("ZERO_INITIALIZER",
+			     "= {} is preferred over = {0}\n" . $herecurr);
Sigh...  "is preferred over" by whom?  Use the active voice, would you?
quoted
[1] and [2] state that {} and {0} don't have the same effect. So if correct,
this is not only a matter of style.

When testing with gcc 10.3.0, I arrived at the conclusion that both {} and
{0} HAVE the same behavior (i.e the whole structure and included structures
are completely zeroed) and I don't have a C standard to check what the rules
are.
gcc online doc didn't help me either.
http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf, but empty
initializer-list is gccism anyway.

Section 6.7.8 is the one to look through there.
That's out of date.  It changed in C11.  Both = { 0 } and = { } will
clear out struct holes. The = { } GCC extension has always initialized
struct holes.

http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1548.pdf

For partial initializations then all the padding is zeroed.
Unfortunately if you fully initialize the struct then padding is not
initialized.

regards,
dan carpenter
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help