В плагине clang, как вы видите, была ли ошибка при компиляции модуля перевода?

Я хочу, чтобы мой плагин clang на самом деле ничего не делал, если произошла ошибка компиляции кода для AST, на котором будет работать мой плагин.

Однако я не могу понять, какой объект содержит список ошибок, сгенерированных во время компиляции.

Есть ли логический запрос о том, была ли ошибка, или список API для получения всех ошибок (или всей диагностики), сгенерированных во время компиляции TU?

Спасибо.


person xaxxon    schedule 15.12.2017    source источник


Ответы (1)


В конце концов я нашел способ получить количество ошибок из объекта 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.

person xaxxon    schedule 15.12.2017