From: Richard Smith Date: Sat, 15 Sep 2018 01:21:18 +0000 (+0000) Subject: [modules] Support use of -E on modules built from the command line. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=e1fb567d8b9026b5dd74136f4b49bd067c7b8e04;p=clang [modules] Support use of -E on modules built from the command line. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@342306 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Frontend/FrontendAction.cpp b/lib/Frontend/FrontendAction.cpp index 10f1d1ef61..d24700535e 100644 --- a/lib/Frontend/FrontendAction.cpp +++ b/lib/Frontend/FrontendAction.cpp @@ -587,12 +587,12 @@ bool FrontendAction::BeginSourceFile(CompilerInstance &CI, assert(ASTModule && "module file does not define its own module"); Input = FrontendInputFile(ASTModule->PresumedModuleMapFile, Kind); } else { - auto &SM = CI.getSourceManager(); - FileID ID = SM.getMainFileID(); - if (auto *File = SM.getFileEntryForID(ID)) + auto &OldSM = AST->getSourceManager(); + FileID ID = OldSM.getMainFileID(); + if (auto *File = OldSM.getFileEntryForID(ID)) Input = FrontendInputFile(File->getName(), Kind); else - Input = FrontendInputFile(SM.getBuffer(ID), Kind); + Input = FrontendInputFile(OldSM.getBuffer(ID), Kind); } setCurrentInput(Input, std::move(AST)); } diff --git a/lib/Frontend/FrontendActions.cpp b/lib/Frontend/FrontendActions.cpp index d0d83076f1..08d91e6a5a 100644 --- a/lib/Frontend/FrontendActions.cpp +++ b/lib/Frontend/FrontendActions.cpp @@ -825,7 +825,7 @@ void PrintPreprocessedAction::ExecuteAction() { } std::unique_ptr OS = - CI.createDefaultOutputFile(BinaryMode, getCurrentFile()); + CI.createDefaultOutputFile(BinaryMode, getCurrentFileOrBufferName()); if (!OS) return; // If we're preprocessing a module map, start by dumping the contents of the @@ -837,8 +837,6 @@ void PrintPreprocessedAction::ExecuteAction() { OS->write_escaped(Input.getFile()); (*OS) << "\"\n"; } - // FIXME: Include additional information here so that we don't need the - // original source files to exist on disk. getCurrentModule()->print(*OS); (*OS) << "#pragma clang module contents\n"; } diff --git a/lib/Frontend/Rewrite/FrontendActions.cpp b/lib/Frontend/Rewrite/FrontendActions.cpp index fa17b3e7cb..bcf6d215c9 100644 --- a/lib/Frontend/Rewrite/FrontendActions.cpp +++ b/lib/Frontend/Rewrite/FrontendActions.cpp @@ -181,7 +181,7 @@ RewriteObjCAction::CreateASTConsumer(CompilerInstance &CI, StringRef InFile) { void RewriteMacrosAction::ExecuteAction() { CompilerInstance &CI = getCompilerInstance(); std::unique_ptr OS = - CI.createDefaultOutputFile(true, getCurrentFile()); + CI.createDefaultOutputFile(true, getCurrentFileOrBufferName()); if (!OS) return; RewriteMacrosInInput(CI.getPreprocessor(), OS.get()); @@ -190,7 +190,7 @@ void RewriteMacrosAction::ExecuteAction() { void RewriteTestAction::ExecuteAction() { CompilerInstance &CI = getCompilerInstance(); std::unique_ptr OS = - CI.createDefaultOutputFile(false, getCurrentFile()); + CI.createDefaultOutputFile(false, getCurrentFileOrBufferName()); if (!OS) return; DoRewriteTest(CI.getPreprocessor(), OS.get()); @@ -265,7 +265,8 @@ public: bool RewriteIncludesAction::BeginSourceFileAction(CompilerInstance &CI) { if (!OutputStream) { - OutputStream = CI.createDefaultOutputFile(true, getCurrentFile()); + OutputStream = + CI.createDefaultOutputFile(true, getCurrentFileOrBufferName()); if (!OutputStream) return false; } diff --git a/test/Modules/no-module-map.cpp b/test/Modules/no-module-map.cpp index 08a864bc84..46ca38af7e 100644 --- a/test/Modules/no-module-map.cpp +++ b/test/Modules/no-module-map.cpp @@ -4,6 +4,11 @@ // RUN: %clang_cc1 -fmodules-ts -fmodule-file=%t.pcm %s -I%S/Inputs/no-module-map -verify -DB // RUN: %clang_cc1 -fmodules-ts -fmodule-file=%t.pcm %s -I%S/Inputs/no-module-map -verify -DA -DB +// RUN: %clang_cc1 -E %t.pcm -o - | FileCheck %s +// RUN: %clang_cc1 -frewrite-imports -E %t.pcm -o - | FileCheck %s +// CHECK: # {{.*}}a.h +// CHECK: # {{.*}}b.h + #ifdef B // expected-no-diagnostics #endif