如何在自定义前端操作和clang静态分析中使用AST

3
我正在进行一个基于libTooling的项目,参考 this编写了一个自定义前端操作类。现在我想在同一工具中运行clang静态分析。目前,我修改编译器选项后再次运行该工具以进行clang静态分析。但这样会再次解析文件并创建AST。
我希望只创建一次AST,并用于自定义前端操作和clang静态分析。如何实现这一点?MultiplexConsumer在这里有任何帮助吗?
1个回答

0

看起来MultiplexConsumer是正确的选择。

以下是我在前端操作类中使用的代码:

std::unique_ptr<ASTConsumer> CreateASTConsumer(
    CompilerInstance& compiler, StringRef inFile) override {

    std::unique_ptr<ASTConsumer> consumer1 =
        std::make_unique<MyConsumer1>(compiler);

    std::unique_ptr<ASTConsumer> consumer2 =
        std::make_unique<MyConsumer2>(compiler);

    std::vector<std::unique_ptr<ASTConsumer>> consumers;
    consumers.emplace_back(std::move(consumer1));
    consumers.emplace_back(std::move(consumer2));
    return std::make_unique<MultiplexConsumer>(std::move(consumers));
}

请注意,如果consumer1返回任何错误,则不会运行consumer2。 如果consumer1仅返回警告或没有诊断信息,则将运行consumer2。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接