aeubanks updated this revision to Diff 381112. aeubanks added a comment. update
Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D112190/new/ https://reviews.llvm.org/D112190 Files: clang/lib/Frontend/FrontendAction.cpp clang/test/Misc/clear-ast-before-backend-plugins.c Index: clang/test/Misc/clear-ast-before-backend-plugins.c =================================================================== --- /dev/null +++ clang/test/Misc/clear-ast-before-backend-plugins.c @@ -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() {} Index: clang/lib/Frontend/FrontendAction.cpp =================================================================== --- clang/lib/Frontend/FrontendAction.cpp +++ clang/lib/Frontend/FrontendAction.cpp @@ -217,8 +217,13 @@ // 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));
Index: clang/test/Misc/clear-ast-before-backend-plugins.c =================================================================== --- /dev/null +++ clang/test/Misc/clear-ast-before-backend-plugins.c @@ -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() {} Index: clang/lib/Frontend/FrontendAction.cpp =================================================================== --- clang/lib/Frontend/FrontendAction.cpp +++ clang/lib/Frontend/FrontendAction.cpp @@ -217,8 +217,13 @@ // 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));
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits