Кажется, что 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));
}
Обратите внимание, что, если потребитель1 возвращает какие-либо ошибки, потребитель2 не будет работать. Если потребитель1 возвращает только предупреждения или не диагностирует, то потребитель 2 будет работать.