On Fri, Dec 07, 2018 at 09:31:06AM -0200, Mauro Carvalho Chehab wrote: > Em Fri, 7 Dec 2018 12:14:50 +0100 > Hans Verkuil <hverkuil@xxxxxxxxx> escreveu: > > > On 12/07/2018 11:56 AM, Mauro Carvalho Chehab wrote: > > > A common mistake is to assume that initializing a var with: > > > struct foo f = { 0 }; > > > > > > Would initialize a zeroed struct. Actually, what this does is > > > to initialize the first element of the struct to zero. > > > > > > According to C99 Standard 6.7.8.21: > > > > > > "If there are fewer initializers in a brace-enclosed > > > list than there are elements or members of an aggregate, > > > or fewer characters in a string literal used to initialize > > > an array of known size than there are elements in the array, > > > the remainder of the aggregate shall be initialized implicitly > > > the same as objects that have static storage duration." > > > > > > So, in practice, it could zero the entire struct, but, if the > > > first element is not an integer, it will produce warnings: > > > > > > drivers/staging/media/sunxi/cedrus/cedrus.c:drivers/staging/media/sunxi/cedrus/cedrus.c:78:49: warning: Using plain integer as NULL pointer > > > drivers/staging/media/sunxi/cedrus/cedrus_dec.c:drivers/staging/media/sunxi/cedrus/cedrus_dec.c:29:35: warning: Using plain integer as NULL pointer > > > > > > A proper way to initialize it with gcc is to use: > > > > > > struct foo f = { }; > > > > > > But that seems to be a gcc extension. So, I decided to check upstream > > > > No, this is not a gcc extension. It's part of the latest C standard. > > Sure? Where the C standard spec states that? I've been seeking for > such info for a while, as '= {}' is also my personal preference. > > I tried to build the Kernel with clang, just to be sure that this > won't cause issues with the clang support My test says that clang works with {}. I support this in Smatch as well. regards, dan carpenter