[PATCH] D26125: [clang-tidy] Fixed else-after-return warning in cascade if statement

Paweł Żukowski via cfe-commits cfe-commits at lists.llvm.org
Sun Oct 30 09:38:27 PDT 2016


idlecode marked an inline comment as done.
idlecode added inline comments.


================
Comment at: clang-tidy/readability/ElseAfterReturnCheck.cpp:28
       stmt(forEach(
-          ifStmt(hasThen(stmt(
+          ifStmt(unless(hasParent(ifStmt())),
+                 hasThen(stmt(
----------------
djasper wrote:
> idlecode wrote:
> > djasper wrote:
> > > I think this now effectively does:
> > > 
> > >   stmt(forEach(ifStmt(unless(hasParent(ifSttmt())), ...)
> > > 
> > > I think that's equivalent to:
> > > 
> > >   stmt(unless(ifStmt()), forEach(ifStmt(...)))
> > Apparently you are right - does that mean that this matcher actually matches node above ifStmt (and just binds ifStmt)?
> > If so maybe such expression would suffice? (it passes tests)
> > ```
> > Finder->addMatcher( // note lack of stmt(forEach(
> >               ifStmt(unless(hasParent(ifStmt())),
> >                  hasThen(stmt(
> >                      anyOf(ControlFlowInterruptorMatcher,
> >                            compoundStmt(has(ControlFlowInterruptorMatcher))))),
> >                  hasElse(stmt().bind("else")))
> >               .bind("if"),
> >       this);
> > 
> > ```
> > 
> > But I'm not sure if this would be any better than your version.
> Yeah. That makes sense to me. The difference is that we would start binding ifStmts() that are direct children of declarations. But I don't know whether we have excluded those intentionally. Do any tests break if you make this change?
I have just ran `make check-clang-tools` on updated source tree - no new failures. Upload the change?
What do you mean by 'if statement as children of declaration'? (I'm new to compilers and just curious :) )


https://reviews.llvm.org/D26125





More information about the cfe-commits mailing list