如果编译我的插件运行的AST的代码时出错,我希望我的clang插件实际上什么都不做。
但是,我无法弄清楚哪个对象包含编译期间生成的错误列表。
是否有用于获取错误的布尔查询或用于获取TU编译期间生成的所有错误(或所有诊断)的列表API?
谢谢。
答案 0 :(得分:2)
我最终想出了一种从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
时,它对我有用。