File tree Expand file tree Collapse file tree 6 files changed +20
-6
lines changed Expand file tree Collapse file tree 6 files changed +20
-6
lines changed Original file line number Diff line number Diff line change @@ -84,6 +84,8 @@ class FrontendAction {
8484 // / \return True on success; on failure ExecutionAction() and
8585 // / EndSourceFileAction() will not be called.
8686 virtual bool BeginSourceFileAction (CompilerInstance &CI) {
87+ if (CurrentInput.isPreprocessed ())
88+ CI.getPreprocessor ().SetMacroExpansionOnlyInDirectives ();
8789 return true ;
8890 }
8991
@@ -98,7 +100,11 @@ class FrontendAction {
98100 // /
99101 // / This is guaranteed to only be called following a successful call to
100102 // / BeginSourceFileAction (and BeginSourceFile).
101- virtual void EndSourceFileAction () {}
103+ virtual void EndSourceFileAction () {
104+ if (CurrentInput.isPreprocessed ())
105+ // Reset the preprocessor macro expansion to the default.
106+ getCompilerInstance ().getPreprocessor ().SetEnableMacroExpansion ();
107+ }
102108
103109 // / Callback at the end of processing a single input, to determine
104110 // / if the output files should be erased or not.
Original file line number Diff line number Diff line change @@ -1847,6 +1847,10 @@ class Preprocessor {
18471847 MacroExpansionInDirectivesOverride = true ;
18481848 }
18491849
1850+ void SetEnableMacroExpansion () {
1851+ DisableMacroExpansion = MacroExpansionInDirectivesOverride = false ;
1852+ }
1853+
18501854 // / Peeks ahead N tokens and returns that token without consuming any
18511855 // / tokens.
18521856 // /
Original file line number Diff line number Diff line change @@ -908,6 +908,8 @@ bool CodeGenAction::loadLinkModules(CompilerInstance &CI) {
908908bool CodeGenAction::hasIRSupport () const { return true ; }
909909
910910void CodeGenAction::EndSourceFileAction () {
911+ ASTFrontendAction::EndSourceFileAction ();
912+
911913 // If the consumer creation failed, do nothing.
912914 if (!getCompilerInstance ().hasASTConsumer ())
913915 return ;
@@ -932,7 +934,7 @@ CodeGenerator *CodeGenAction::getCodeGenerator() const {
932934bool CodeGenAction::BeginSourceFileAction (CompilerInstance &CI) {
933935 if (CI.getFrontendOpts ().GenReducedBMI )
934936 CI.getLangOpts ().setCompilingModule (LangOptions::CMK_ModuleInterface);
935- return true ;
937+ return ASTFrontendAction::BeginSourceFileAction (CI) ;
936938}
937939
938940static std::unique_ptr<raw_pwrite_stream>
Original file line number Diff line number Diff line change @@ -181,7 +181,7 @@ bool GeneratePCHAction::shouldEraseOutputFiles() {
181181
182182bool GeneratePCHAction::BeginSourceFileAction (CompilerInstance &CI) {
183183 CI.getLangOpts ().CompilingPCH = true ;
184- return true ;
184+ return ASTFrontendAction::BeginSourceFileAction (CI) ;
185185}
186186
187187std::vector<std::unique_ptr<ASTConsumer>>
Original file line number Diff line number Diff line change @@ -103,12 +103,13 @@ bool FixItAction::BeginSourceFileAction(CompilerInstance &CI) {
103103 }
104104 Rewriter.reset (new FixItRewriter (CI.getDiagnostics (), CI.getSourceManager (),
105105 CI.getLangOpts (), FixItOpts.get ()));
106- return true ;
106+ return ASTFrontendAction::BeginSourceFileAction (CI) ;
107107}
108108
109109void FixItAction::EndSourceFileAction () {
110110 // Otherwise rewrite all files.
111111 Rewriter->WriteFixedFiles ();
112+ ASTFrontendAction::EndSourceFileAction ();
112113}
113114
114115bool FixItRecompile::BeginInvocation (CompilerInstance &CI) {
@@ -298,7 +299,7 @@ bool RewriteIncludesAction::BeginSourceFileAction(CompilerInstance &CI) {
298299 std::make_unique<RewriteImportsListener>(CI, OutputStream));
299300 }
300301
301- return true ;
302+ return PreprocessorFrontendAction::BeginSourceFileAction (CI) ;
302303}
303304
304305void RewriteIncludesAction::ExecuteAction () {
Original file line number Diff line number Diff line change 11// RUN: %clang_cc1 -E -x c %s | FileCheck %s --check-prefixes=EXPANDED
2- // RUN: %clang_cc1 -E -x cpp-output %s | FileCheck %s --check-prefixes=EXPANDED
2+ // RUN: %clang_cc1 -E -x cpp-output %s | FileCheck %s --check-prefixes=NOT- EXPANDED
33
44// EXPANDED: void __attribute__((__attribute__((always_inline)))) foo()
5+ // NOT-EXPANDED: void __attribute__((always_inline)) foo()
56
67#define always_inline __attribute__((always_inline))
78void __attribute__((always_inline )) foo () {
You can’t perform that action at this time.
0 commit comments