1

如果为我的插件将要运行的 AST 编译代码时出错,我希望我的 clang 插件实际上不做任何事情。

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

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

谢谢你。

4

1 回答 1

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.

于 2017-12-15T21:13:10.597 回答