[PATCH] D18271: Avoid -Wshadow warnings about constructor parameters named after fields
Richard Smith via cfe-commits
cfe-commits at lists.llvm.org
Tue Apr 19 10:33:51 PDT 2016
rsmith added inline comments.
================
Comment at: lib/Sema/SemaDecl.cpp:6437-6445
@@ +6436,11 @@
+ // Warn immediately if -Wshadow-field-in-constructor is set.
+ Diag(R.getNameLoc(), diag::warn_ctor_parm_shadows_field)
+ << D << FD << FD->getParent();
+ Diag(FD->getLocation(), diag::note_previous_declaration);
+ // Remember that this was shadowed so we can warn later if it is
+ // modified.
+ ShadowingDecls.insert({D, FD});
+ return;
+ }
+ }
+
----------------
Here's what I was thinking:
* The new warning goes in its own group, say `-Wshadow-field-in-constructor-modified`
* The new warning group is part of both `-Wshadow` and `-Wshadow-field-in-constructor`
* We produce the `-Wshadow-field-in-constructor` warning from `ActOnPopScope` whenever we remove something from the map.
This means that our behavior is as if `-W` flags filter our warning output, and we only get one warning for each instance of shadowing, and `-Wshadow-field-in-constructor` can be used to control all constructor-parameter-shadows-field warnings (and even obscure cases like `-Wshadow -Wno-shadow-field-in-constructor` do what they look like they should do).
http://reviews.llvm.org/D18271
More information about the cfe-commits
mailing list