The attached patch adds an explanation of the new
-Wshadow=(global|local|compatible-local) to gcc-7/changes.html.
OK to commit?
Thanks,
Mark
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>