如果为我的插件将要运行的 AST 编译代码时出错,我希望我的 clang 插件实际上不做任何事情。
但是,我无法弄清楚哪个对象包含编译期间生成的错误列表。
是否有一个布尔查询是否有错误或一个列表 API 用于获取 TU 编译期间生成的所有错误(或所有诊断)?
谢谢你。
如果为我的插件将要运行的 AST 编译代码时出错,我希望我的 clang 插件实际上不做任何事情。
但是,我无法弄清楚哪个对象包含编译期间生成的错误列表。
是否有一个布尔查询是否有错误或一个列表 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
.