On 04/25/2014 03:54 AM, Mike Stump wrote:
On Apr 24, 2014, at 4:16 PM, Dimitris Papavasiliou<dpapa...@gmail.com>  wrote:
On 04/24/2014 11:17 PM, Jakub Jelinek wrote:
How has this been tested?

I'm seeing:

+FAIL: obj-c++.dg/local-decl-1.mm -fgnu-runtime  (test for warnings, line 39)
+FAIL: obj-c++.dg/local-decl-1.mm -fgnu-runtime  (test for warnings, line 41)
+FAIL: obj-c++.dg/private-2.mm -fgnu-runtime  (test for warnings, line 32)
+FAIL: obj-c++.dg/private-2.mm -fgnu-runtime  (test for warnings, line 33)
+FAIL: obj-c++.dg/private-2.mm -fgnu-runtime  (test for warnings, line 34)
+FAIL: obj-c++.dg/private-2.mm -fgnu-runtime  (test for warnings, line 53)
+FAIL: obj-c++.dg/private-2.mm -fgnu-runtime  (test for warnings, line 54)
+FAIL: objc.dg/local-decl-1.m -fgnu-runtime  (test for warnings, line 23)
+FAIL: objc.dg/local-decl-2.m -fgnu-runtime  (test for warnings, line 37)
+FAIL: objc.dg/local-decl-2.m -fgnu-runtime  (test for warnings, line 39)
+FAIL: objc.dg/private-2.m -fgnu-runtime  (test for warnings, line 30)
+FAIL: objc.dg/private-2.m -fgnu-runtime  (test for warnings, line 31)
+FAIL: objc.dg/private-2.m -fgnu-runtime  (test for warnings, line 32)
+FAIL: objc.dg/private-2.m -fgnu-runtime  (test for warnings, line 51)
+FAIL: objc.dg/private-2.m -fgnu-runtime  (test for warnings, line 52)

regressions compared to a bootstrap/regtest from a few hours ago on
i686-linux (x86_64-linux still regtesting, but the objc.dg/ failures
can be seen in the logs already).

        Jakub


These failures are due to the fact that the patch made -Wshadow control the warnings 
related to instance variable hiding.  These were before "enabled by default" 
although they were clearly cases of variable shadowing.

So, in general, to contribute patches, you will want to run the test suite to 
ensure quality.  We don’t want to remove warnings without good reason…  so I’m 
defaulting them back to on.  In your text, you didn’t seem to cover this, other 
than to note what we do and to say some might want to turn them off.

Now, if clang turned them off by default, we can go that way, but I’d like to 
maintain users expectations of those on.  I’m anticipating they have them on by 
default still.

I tried to implement all changes in such a way that the default behavior of GCC wouldn't be changed but this side-effect slipped my attention. I also tried to run the test suite but, as I recall, I was getting errors even on the freshly checked out sources, so I got lazy and gave up on that until the proposed changes were actually approved for merging. Sorry about that.

Index: gcc/c-family/c.opt
===================================================================
--- gcc/c-family/c.opt  (revision 209755)
+++ gcc/c-family/c.opt  (working copy)
@@ -685,7 +685,7 @@ ObjC ObjC++ Var(warn_selector) Warning
  Warn if a selector has multiple methods

  Wshadow-ivar
-ObjC ObjC++ Var(warn_shadow_ivar) Init(-1) Warning
+ObjC ObjC++ Var(warn_shadow_ivar) Init(1) Warning
  Warn if a local declaration hides an instance variable

  Wsequence-point

Committed revision 209774.

Thanks Jakub for pointing it out.

Although this will work to get the expected behavior back it has the slightly annoying side-effect that specifying -Wno-shadow explicitly will *not* turn this particular form of variable shadowing warning off. Might I suggest the following change?

Index: gcc/c-family/c.opt
===================================================================
--- gcc/c-family/c.opt  (revision 209787)
+++ gcc/c-family/c.opt  (working copy)
@@ -685,7 +685,7 @@
 Warn if a selector has multiple methods

 Wshadow-ivar
-ObjC ObjC++ Var(warn_shadow_ivar) Init(1) Warning
+ObjC ObjC++ Var(warn_shadow_ivar) EnabledBy(Wshadow) Init(1) Warning
 Warn if a local declaration hides an instance variable

 Wsequence-point

The GCC Internals documentation is a little vague as to what the value of warn_shadow_ivar will be if Init and EnabledBy are both specified, and -Wshadow is *not* explicitly specified, but tests indicate that we get the desired behavior. That is, the warning is enabled by default but can be disabled both by -Wno-shadow and by -Wno-shadow-ivar.

If you adopt this change, let me know so that I can add a testcase for -Wno-shadow as well.

Dimitris

Reply via email to