Szelethus added a comment. Herald added a subscriber: donat.nagy. Bad news, this approach doesn't work too well, and here's why: https://github.com/llvm-mirror/clang/blob/master/lib/StaticAnalyzer/Core/CheckerRegistry.cpp#L115
void CheckerRegistry::initializeManager(CheckerManager &checkerMgr, SmallVectorImpl<CheckerOptInfo> &opts) const { // Sort checkers for efficient collection. llvm::sort(Checkers, checkerNameLT); // Collect checkers enabled by the options. CheckerInfoSet enabledCheckers; for (auto &i : opts) collectCheckers(Checkers, Packages, i, enabledCheckers); // Initialize the CheckerManager with all enabled checkers. for (const auto *i :enabledCheckers) { checkerMgr.setCurrentCheckName(CheckName(i->FullName)); i->Initialize(checkerMgr); } } Note that `Initialize` is a function pointer that points to `register##CHECKERNAME`, so a single registry function should only register one checker, because `setCurrentCheckName` is only called once, resulting in `MallocChecker`'s checker object receiving the `cpluscplus.InnetPointer` name. It's very not-obvious how to fix this gracefully :/ You could call `CheckerManager::setCurrentCheckName` within the registry function, but you have to supply a full name, which adds unnecessary maintenance cost (for example, if someone moves a checker out of alpha, or puts one back). I found this bug while trying to fix checker options, and noticed that the `Optimistic` flag of `MallocChecker` is acquired as `cplusplus.InnerPointer:Optimistic`, instead of `unix.Malloc:Optimistic`. Let's keep this in for now, and I'll try to look for ways to express dependencies while avoiding this issue. https://reviews.llvm.org/D50211 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits