On Sun, 2016-11-13 at 18:45 +0100, Mark Wielaard wrote: > On Sat, Nov 05, 2016 at 10:50:57PM +0100, Mark Wielaard wrote: > > The attached patch adds an explanation of the new > > -Wshadow=(global|local|compatible-local) to gcc-7/changes.html. > > > > OK to commit? > > Ping?
If this just isn't something that should be documented in changes.html please let me know and I'll stop pinging. > > Index: htdocs/gcc-7/changes.html > > =================================================================== > > RCS file: /cvs/gcc/wwwdocs/htdocs/gcc-7/changes.html,v > > retrieving revision 1.21 > > diff -u -r1.21 changes.html > > --- htdocs/gcc-7/changes.html 26 Oct 2016 19:08:10 -0000 1.21 > > +++ htdocs/gcc-7/changes.html 5 Nov 2016 20:41:35 -0000 > > @@ -119,6 +119,60 @@ > > <span class="boldmagenta">~^</span> > > <span class="boldmagenta">~~~~~</span> > > <span class="green">%d</span> > > </pre></blockquote></li> > > + > > +<li>The <code>-Wshadow</code> warning has been split into 3 > > +variants. <code>-Wshadow=global</code> warns for any shadowing. This > > +is the default when using <code>-Wshadow</code> without any > > +argument. <code>-Wshadow=local</code> only warns for a local variable > > +shadowing another local variable or > > +parameter. <code>-Wshadow=compatible-local</code> only warns for a > > +local variable shadowing another local variable or parameter whose > > +type is compatible (in C++ compatible means that the type of the > > +shadowing variable can be converted to that of the shadowed variable). > > + > > +The following example shows the different kinds of shadow > > +warnings:<blockquote><pre> > > +enum operation { add, count }; > > +struct container { int nr; }; > > + > > +int > > +container_count (struct container c, int count) > > +{ > > + int r = 0; > > + for (int count = 0; count > 0; count--) > > + { > > + struct container count = c; > > + r += count.nr; > > + } > > + return r; > > +}</pre></blockquote> > > + > > +<code>-Wshadow=compatible-local</code> will warn for the parameter being > > +shadowed with the same type:<blockquote><pre> > > +<b>warn-test.c:8:12:</b> <span class="boldmagenta">warning:</span> > > declaration of '<b>count</b>' shadows a parameter [<span > > class="boldmagenta">-Wshadow=compatible-local</span>] > > + for (int <span class="boldmagenta">count</span> = 0; count > 0; count--) > > + <span class="boldmagenta">^~~~~</span> > > +<b>warn-test.c:5:42:</b> <span class="boldcyan">note:</span> shadowed > > declaration is here > > + container_count (struct container c, int <span > > class="boldcyan">count</span>) > > + <span > > class="boldcyan">^~~~~</span></pre></blockquote> > > + > > +<code>-Wshadow=local</code> will warn for the above and for the shadowed > > +declaration with incompatible type:<blockquote><pre> > > +<b>warn-test.c:10:24:</b> <span class="boldmagenta">warning:</span> > > declaration of '<b>count</b>' shadows a previous local [<span > > class="boldmagenta">-Wshadow=local</span>] > > + struct container <span class="boldmagenta">count</span> = c; > > + <span class="boldmagenta">^~~~~</span> > > +<b>warn-test.c:8:12:</b> <span class="boldcyan">note:</span> shadowed > > declaration is here > > + for (int <span class="boldcyan">count</span> = 0; count > 0; count--) > > + <span class="boldcyan">^~~~~</span></pre></blockquote> > > + > > +<code>-Wshadow=global</code> will warn for all of the above and the > > shadowing > > +of the global declaration: <blockquote><pre> > > +<b>warn-test.c:5:42:</b> <span class="boldmagenta">warning:</span> > > declaration of '<b>count</b>' shadows a global declaration [<span > > class="boldmagenta">-Wshadow</span>] > > + container_count (struct container c, int <span > > class="boldmagenta">count</span>) > > + <span > > class="boldmagenta">^~~~~</span> > > +<b>warn-test.c:1:23:</b> <span class="boldcyan">note:</span> shadowed > > declaration is here > > + enum operation { add, <span class="boldcyan">count</span> }; > > + <span > > class="boldcyan">^~~~~</span></pre></blockquote></li> > > </ul> > > > > <h3 id="c">C</h3> >