[clang] [analyzer][NFC] Introduce framework for checker families (PR #139256)
DonĂ¡t Nagy via cfe-commits
cfe-commits at lists.llvm.org
Tue May 20 15:42:01 PDT 2025
NagyDonat wrote:
I have yet another implementation idea where:
- boilerplate is either minimal or nonexistent;
- there is no need to pass an additional string value (the debug name) through the checker registry code;
- the debug name is guaranteed to be the same as the class name.
The minimal-boilerplate version looks like
```c++
template <typename T>
StringRef getCheckerFamilyName();
#define REGISTER_CHECKER_FAMILY(NAME) template <> StringRef getCheckerFamilyName<NAME>() { return #NAME; }
// in the body of CheckerFamily
template <typename CHECKER>
static void _register(CHECKER *Chk, CheckerManager &Mgr) {
Chk->CheckerBackendName = getCheckerFamilyName<CHECKER>();
(CHECKs::_register(Chk, Mgr), ...);
}
// in each file that implements a checker family
REGISTER_CHECKER_FAMILY(MyBeautifulCheckerFamily)
```
If we assume that each checker family class is mentioned in `Checkers.td`, then we can replace `REGISTER_CHECKER_FAMILY` with a header that says
```c++
#define GET_CHECKERS
#define CHECKER(FULLNAME, CLASS, HELPTEXT, DOC_URI, IS_HIDDEN) template <> StringRef getCheckerFamilyName<typename CLASS>() { return #CLASS; }
#include "Checkers.inc"
#undef CHECKER
#undef GET_CHECKERS
```
@steakhal WDYT about this one?
https://github.com/llvm/llvm-project/pull/139256
More information about the cfe-commits
mailing list