在clang插件中,您如何看待编译翻译单元是否有错误?

时间:2017-12-15 15:36:42

标签: c++ clang clang-ast-matchers clang-plugin

如果编译我的插件运行的AST的代码时出错,我希望我的clang插件实际上什么都不做。

但是,我无法弄清楚哪个对象包含编译期间生成的错误列表。

是否有用于获取错误的布尔查询或用于获取TU编译期间生成的所有错误(或所有诊断)的列表API?

谢谢。

1 个答案:

答案 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时,它对我有用。