[PATCH] D77572: [clang-tidy] add new check readability-use-anyofallof

Nathan James via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Tue Apr 7 23:58:20 PDT 2020


njames93 added a comment.

In D77572#1967956 <https://reviews.llvm.org/D77572#1967956>, @mgehre wrote:

> In D77572#1965143 <https://reviews.llvm.org/D77572#1965143>, @njames93 wrote:
>
> > I'm struggling to see the value of this check though. If it was reworked to check for loop in the middle of a function it would have a lot more value.
>
>
> This is (just) a first step. The next step is to detect the local variable case as you also described it. Note that this also catches functions
>  that do some preprocessing and end with a any_of-style loop.
>  I also have a local branch that generates fixits, but they add quite some code, so I wanted to put them in a separate PR.
>
> In LLVM & clang, the check in this PR already emits 370 unique warnings.


Take this example from TableGen/Record.cpp:

  bool CondOpInit::isConcrete() const {
    for (const Init *Case : getConds())
      if (!Case->isConcrete())
        return false;
  
    for (const Init *Val : getVals())
      if (!Val->isConcrete())
        return false;
  
    return true;
  }

Firstly, the warning is only emitted on the second loop.
Secondly how does your fix it code handle temporaries?
Would it transform to

  bool CondOpInit::isConcrete() const {
    for (const Init *Case : getConds())
      if (!Case->isConcrete())
        return false;
  
    return std::all_of(getVals().begin(), getVals().end(),
                       [](const Init *Val) { return Val->isConcrete(); });
  }

I'd argue that it actually makes the code less readable as there are 2 different constructs for the same thing.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D77572/new/

https://reviews.llvm.org/D77572





More information about the cfe-commits mailing list