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>
> 

Reply via email to