forked from OSchip/llvm-project
[clang] Don't clear AST if we have consumers running after the main action
Downstream users may have Clang plugins. By default these plugins run after the main action if they are specified on the command line. Since these plugins are ASTConsumers, presumably they inspect the AST. So we shouldn't clear it if any plugins run after the main action. Reviewed By: dblaikie, hans Differential Revision: https://reviews.llvm.org/D112190
This commit is contained in:
parent
b8da594750
commit
2dcad7754a
|
@ -217,8 +217,13 @@ FrontendAction::CreateWrappedASTConsumer(CompilerInstance &CI,
|
|||
|
||||
// Add to Consumers the main consumer, then all the plugins that go after it
|
||||
Consumers.push_back(std::move(Consumer));
|
||||
for (auto &C : AfterConsumers) {
|
||||
Consumers.push_back(std::move(C));
|
||||
if (!AfterConsumers.empty()) {
|
||||
// If we have plugins after the main consumer, which may be the codegen
|
||||
// action, they likely will need the ASTContext, so don't clear it in the
|
||||
// codegen action.
|
||||
CI.getCodeGenOpts().ClearASTBeforeBackend = false;
|
||||
for (auto &C : AfterConsumers)
|
||||
Consumers.push_back(std::move(C));
|
||||
}
|
||||
|
||||
return std::make_unique<MultiplexConsumer>(std::move(Consumers));
|
||||
|
|
|
@ -0,0 +1,9 @@
|
|||
// REQUIRES: plugins, examples, asserts
|
||||
|
||||
// RUN: %clang_cc1 -mllvm -debug-only=codegenaction -clear-ast-before-backend -emit-obj -o /dev/null -load %llvmshlibdir/PrintFunctionNames%pluginext %s 2>&1 | FileCheck %s --check-prefix=YES
|
||||
// YES: Clearing AST
|
||||
|
||||
// RUN: %clang_cc1 -mllvm -debug-only=codegenaction -clear-ast-before-backend -emit-obj -o /dev/null -load %llvmshlibdir/PrintFunctionNames%pluginext -add-plugin print-fns -plugin-arg-print-fns help %s 2>&1 | FileCheck %s --check-prefix=NO
|
||||
// NO-NOT: Clearing AST
|
||||
|
||||
void f() {}
|
Loading…
Reference in New Issue