git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH] range-diff: fix some 'hdr-check' and sparse warnings

From
Jeff King <peff@peff.net>
Date
Jul 15, 2019, 18:15 UTC
Message-ID
<20190715181527.GA30747@sigill.intra.peff.net>
In-Reply-To
<4be7a0a1-0256-40c3-4abc-d3d9302f527b@kdbg.org>
On Mon, Jul 15, 2019 at 07:30:09PM +0200, Johannes Sixt wrote:
Show 14 quoted lines
> Am 15.07.19 um 16:46 schrieb Jeff King:
> > On Sun, Jul 14, 2019 at 10:30:27AM +0200, Johannes Sixt wrote:
> >>> But it does fall down
> >>> when the first element _has_ to be a struct (like, say, any user of our
> >>> hashmap.[ch] interface).
> >>
> >> No, it does not. It is not necessary to spell out nested structs in the
> >> initializer.
> > 
> > Ah, that is news to me. I know that this compiles OK with "gcc -Wall",
> > but is it guaranteed by the standard?
> 
> Yes; see http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1124.pdf,
> 6.7.8 §20, in particular, the sentence beginning with "Otherwise".
Thanks, I didn't know about that subtlety.

I think relying on that flattening would be a terrible style choice to use for initializing to particular values, but it makes perfect sense in the context of using a single 0 to mean "zero-initialize the whole struct".

That actually kind of makes me think that reordering our struct members (to put an arithmetic type or a struct containing one at the beginning) _might_ be worth doing as a workaround to tools like sparse. It's hacky, but it puts the effort of dealing with this problem only in one spot (the struct definition) instead of many (everywhere the struct is used).

But I'd be happy if we could address it in another way (e.g., convincing sparse to stop complaining about it, or just decide it's not worth dealing with). One other thing I haven't seen discussed in this thread: we could actually make our preferred style be for all structs to define a FOO_INIT initializer, like we already do for STRBUF_INIT, etc. That's a much more heavyweight solution than what's being discussed here, but it comes with an extra benefit: it's easy to catch and change all users if the struct switches away from zero-initialization.

I'm on the fence on whether having non-zero initializers is a good strategy overall. You can always bootstrap any other on-demand setup from the zero-initialized state, but it does sometimes lead to more awkward code (e.g., needing an explicit call to initialized_if_needed() in every function that works with the struct, or inverting the sense of boolean members so that the default is always "0").

-Peff
Previous: Johannes SixtNext: Junio C Hamano
Message 13 of 23 in “range-diff: fix some 'hdr-check' and sparse warnings”
  1. range-diff: fix some 'hdr-check' and sparse warningsRamsay Jones, Jul 11, 2019
  2. Johannes SixtJul 12, 2019
  3. Junio C HamanoJul 12, 2019
  4. Johannes SixtJul 13, 2019
  5. Johannes SixtJul 13, 2019
  6. Carlo ArenasJul 13, 2019
  7. Junio C HamanoJul 13, 2019
  8. Carlo ArenasJul 13, 2019
  9. Jeff KingJul 14, 2019
  10. Johannes SixtJul 14, 2019
  11. Jeff KingJul 15, 2019
  12. Johannes SixtJul 15, 2019
  13. Jeff KingJul 15, 2019
  14. Junio C HamanoJul 16, 2019
  15. Jeff KingJul 16, 2019
  16. Junio C HamanoJul 17, 2019
  17. Jeff KingJul 17, 2019
  18. Junio C HamanoJul 17, 2019
  19. Johannes SixtJul 17, 2019
  20. Johannes SchindelinJul 15, 2019
  21. Junio C HamanoOct 2, 2020
  22. Johannes SchindelinOct 4, 2020
  23. Johannes SixtJul 14, 2019

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.