Я хочу, чтобы мой плагин clang на самом деле ничего не делал, если произошла ошибка при компиляции кода для AST, на котором будет работать мой плагин.
Однако я не могу понять, какой объект содержит список ошибок, сгенерированных во время компиляции.
Существует ли логический запрос на наличие ошибки или API списка для получения всех ошибок (или всех диагностик), сгенерированных во время компиляции TU?
Спасибо.
В конце концов я нашел способ получить количество ошибок от CompilerInstance
объект:
auto & ast_context = compiler_instance.getASTContext();
auto & diagnostics_engine = ast_context.getDiagnostics();
auto diagnostic_consumer = diagnostics_engine.getClient();
auto error_count = diagnostic_consumer->getNumErrors();
if (error_count > 0) {
llvm::report_fatal_error("Errors during compilation, plugin aborting");
}
Я не знаю, является ли это лучшим способом, но он работает для меня, когда я помещаю приведенный выше код в onStartOfTranslationUnit
моего класса я проистекаю из ast_matchers::MatchFinder::MatchCallback
,
Других решений пока нет …