rnk added a comment.

In http://reviews.llvm.org/D18271#381769, @rsmith wrote:

> I think a reasonable approach would be: "do not warn on shadowing if the 
> idiom of naming a constructor parameter after a class member is used, and the 
> class member is initialized from that constructor parameter, and all uses of 
> the parameter in the constructor body would still be valid if it were 
> declared `const`".


That sounds like the right check, but I don't have a lot of time to work on 
this and I don't want to let the perfect be the enemy of the good. Do you think 
is a reasonable half-way point for us to leave it for the next year or so?

> In particular, I think we should probably warn if a non-const reference is 
> bound to the parameter, or if the constructor's member initializer list does 
> not contain `field(field)`.


Would the reference binding check be somewhere in SemaInit.cpp? I don't see an 
obvious spot to do this check at first glance.

> (I agree that catching `A(X x) : x(std::move(x)) { use(x); }` is outside the 
> scope of this change.)


Wouldn't the proposed check for non-const references find this example, though?


================
Comment at: lib/Sema/SemaDecl.cpp:6400
@@ +6399,3 @@
+    if (isa<CXXConstructorDecl>(NewDC) && isa<ParmVarDecl>(D))
+      return;
+  }
----------------
rsmith wrote:
> Instead of redoing class member lookup every time we check to see if a 
> variable is modifiable, perhaps you could populate a set of 
> shadowed-but-not-diagnosed `VarDecl*`s here? That way, you can also suppress 
> the duplicate diagnostics if the variable is modified multiple times by 
> removing it from the set.
That sounds like a good idea. I could even leave it empty if we're not doing 
-Wshadow.

================
Comment at: lib/Sema/SemaExpr.cpp:9663
@@ +9662,3 @@
+  if (!S.getLangOpts().CPlusPlus ||
+      S.Diags.isIgnored(diag::warn_decl_shadow, Loc))
+    return;
----------------
rsmith wrote:
> This query is actually quite expensive (more so than some or all of the other 
> checks below).
This check has to be faster than name lookup, right? Maybe do it before that?


http://reviews.llvm.org/D18271



_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to