[PATCH] D72035: [analyzer][NFC] Use CallEvent checker callback in GenericTaintChecker

Balázs Benics via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Tue Feb 25 05:59:55 PST 2020


steakhal marked 5 inline comments as done.
steakhal added a comment.

In D72035#1889320 <https://reviews.llvm.org/D72035#1889320>, @Szelethus wrote:

> Wow. Its a joy to see you do C++. LGTM. Are you planning to introduce `CallDescriptionMap` at one point? :)


Yes, definitely.



================
Comment at: clang/lib/StaticAnalyzer/Checkers/GenericTaintChecker.cpp:492-509
+    const auto OneOf = [FDecl](const auto &... Name) {
+      // FIXME: use fold expression in C++17
+      using unused = int[];
+      bool ret = false;
+      static_cast<void>(unused{
+          0, (ret |= CheckerContext::isCLibraryFunction(FDecl, Name), 0)...});
+      return ret;
----------------
Szelethus wrote:
> Whoa, this is amazing, but looks like a google interview question or something -- is this a technique I should know about it? I feel like we kinda sacrificed readability for coolness.
Actually, I agree but still convinced that it is the future-compatible way of doing this.
```lang=c++
    const auto OneOf = [FDecl](const auto &... Name) {
      // FIXME: use fold expression in C++17
      using unused = int[];
      bool ret = false;
      static_cast<void>(unused{
          0, (ret |= CheckerContext::isCLibraryFunction(FDecl, Name), 0)...});
      return ret;
    };
```
In C++17 using fold expressions the whole lambda could be implemented such a way:
```lang=c++
    const auto OneOf = [FDecl](const auto &... Name) {
      return (CheckerContext::isCLibraryFunction(FDecl, Name) || ...);
    };
```



Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D72035





More information about the cfe-commits mailing list