alexfh accepted this revision.
alexfh added a comment.
This revision is now accepted and ready to land.

LG modulo comment.



================
Comment at: clang-tidy/utils/DeclRefExprUtils.cpp:127
+      match(findAll(declRefExpr(equalsNode(&DeclRef),
+                                unless(hasAncestor(stmt(anyOf(
+                                    forStmt(), cxxForRangeStmt(), whileStmt(),
----------------
flx wrote:
> alexfh wrote:
> > flx wrote:
> > > alexfh wrote:
> > > > How will this work with lambdas / local classes declared inside a loop? 
> > > > Not sure if this case is going to happen in real code, but we'd better 
> > > > be clear about the limitations of the implementation.
> > > Why would this not work? Could you give an example? The way the function 
> > > is written it handles my the use case for identifying when moving the 
> > > parameter is not safe, so I could also just move it into the 
> > > UnnecessaryValueParamCheck.
> > I was thinking about a case where a loop this matcher finds is outside of 
> > the function definition and shouldn't be considered:
> > 
> >   void F() {
> >     for (;;) {
> >       struct C {
> >         void f(ExpensiveMovableType E) {
> >           auto F = E;
> >         }
> >       };
> >     }
> >   }
> > 
> This case is not an issue in the check as we're passing f's body statement to 
> the hasLoopStmtAncestor function, so the search is scoped to f's body.
> 
> If you're concerned about the case where someone calls this with  F's body 
> but expects it to be scoped to f I can just move this function into the check 
> and make it an implementation detail.
Making it an implementation detail until other potential users appear sounds 
good.


https://reviews.llvm.org/D27187



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

Reply via email to