Я пытаюсь добавить свою собственную программу проверки в статический анализатор clang . Следуя инструкциям для добавления проверки в Clang , я сделал следующее:
Написано проверка скелета в MyChecker.cpp
:
using namespace clang;
using namespace ento;
namespace {
class MyChecker : public Checker<check::PreCall,
check::PostCall,
check::Location> {
public:
void checkPreCall(const CallEvent &Call, CheckerContext &C) const;
void checkPostCall(const CallEvent &Call, CheckerContext &C) const;
};
}
void MyChecker::checkPreCall(const CallEvent &Call, CheckerContext &C) const {}
void MyChecker::checkPostCall(const CallEvent &Call, CheckerContext &C) const {}
void ento::registerMyChecker(CheckerManager &mgr) {
mgr.registerChecker<MyChecker>();
}
Добавлен исходный файл в файл Checkers CMakeLists.txt
:
...
MPI-Checker/MPIFunctionClassifier.cpp
MyChecker.cpp
NSAutoreleasePoolChecker.cpp
...
И добавил запись в Checkers.td
:
def MyChecker : Checker<"MyChecker">,
HelpText<"MyChecker">,
DescFile<"MyChecker.cpp">;
Когда я пытаюсь скомпилировать clang, я получаю следующую ошибку:
MyChecker.cpp:30:12: error: out-of-line definition of 'registerMyChecker' does not match any declaration in namespace 'clang::ento'
void ento::registerMyChecker(CheckerManager &mgr) {
^~~~~~~~~~~~~~~~~
1 error generated.
ninja: build stopped: subcommand failed.
Почему я не могу зарегистрировать MyChecker?