[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