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

Re: [PATCH 0/2] -Wuninitialized

From
Jeff King <peff@peff.net>
Date
Mar 20, 2018, 04:32 UTC
Message-ID
<20180320043225.GB13302@sigill.intra.peff.net>
In-Reply-To
<8f6d8e2e-aba4-128c-f17c-6c1b9c12436c@ramsayjones.plus.com>
On Mon, Mar 19, 2018 at 05:53:09PM +0000, Ramsay Jones wrote:
Show 8 quoted lines
> This series removes all 'self-initialised' variables (ie. <type> var = var;).
> This construct has been used to silence gcc '-W[maybe-]uninitialized' warnings
> in the past [1]. Unfortunately, this construct causes warnings to be issued by
> MSVC [2], along with clang static analysis complaining about an 'Assigned value
> is garbage or undefined'. The number of these constructs has dropped over the
> years (eg. see [3] and [4]), so there are currently only 6 remaining in the
> current codebase. As demonstrated below, 5 of these no longer cause gcc to
> issue warnings.

Great. I'm happy to see these going away, and thanks for all the careful digging.

Show 16 quoted lines
> If we now add a patch to remove all self-initialization, which would be the
> first patch plus the obvious change to 'saved_namelen' in read-cache.c, then
> note the warnings issued by various compilers at various optimization levels
> on several different platforms [5]:
> 
>                     O0      O1      O2      O3      Os       Og
>  1) gcc 4.8.3   |   -      1,20     1    1,18-19  1-4,21-23  1,5-17
>  2) gcc 4.8.4   |   -      1,20     1       1     1-4,21-23  1,5-8,10-13,15-16 
>  3) clang 3.4   |   -       -       -       -        -       n/a 
>  4) gcc 5.4.0   |   -       1       1       1     1,3-4,21   1,5-8,10-13,16-16
>  5) clang 3.8.0 |   -       -       -       -        -       n/a 
>  6) gcc 5.4.0   |   -       1       1       1       1-4     1,5-17 
>  7) clang 3.8.0 |   -       -       -       -        -       n/a 
>  8) gcc 6.4.0   |   -       1       1    1,18-19    1,4     1,5-17
>  9) clang 5.0.1 |   -       -       -       -        -        -
> 10) gcc 7.2.1   |   -       1       1       1       1,4     1,5-17

So I guess this could create headaches for people using DEVELOPER=1 on as ancient a compiler as 4.8.4, but most other people should be OK. I think I can live with that as a cutoff, and the Travis builds should work there.

(And if we do the detect-compiler stuff from the other nearby thread, somebody who cares can even loosen the warnings for those old gcc versions).

I'm neglecting anybody doing -O3 or -Os here, but IMHO those are sufficiently rare that the builder can tweak their own settings.

I wonder if people use -Og, though? I don't (I usually do -O0 for my edit-compile-debug cycle).

-Peff
Previous: Ramsay JonesNext: Ramsay Jones
Message 2 of 5 in “-Wuninitialized”
  1. 0/2 -WuninitializedRamsay Jones, Mar 19, 2018
  2. Jeff KingMar 20, 2018
  3. Ramsay JonesMar 20, 2018
  4. Johannes SchindelinMar 20, 2018
  5. Ramsay JonesMar 20, 2018

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.