From 8b464f299fe0358ed4b82ea269a63155081c73ff Mon Sep 17 00:00:00 2001 From: Richard Smith Date: Sat, 15 Sep 2018 01:21:18 +0000 Subject: [PATCH] [modules] Support use of -E on modules built from the command line. llvm-svn: 342306 --- clang/lib/Frontend/FrontendAction.cpp | 8 ++++---- clang/lib/Frontend/FrontendActions.cpp | 4 +--- clang/lib/Frontend/Rewrite/FrontendActions.cpp | 7 ++++--- clang/test/Modules/no-module-map.cpp | 5 +++++ 4 files changed, 14 insertions(+), 10 deletions(-) diff --git a/clang/lib/Frontend/FrontendAction.cpp b/clang/lib/Frontend/FrontendAction.cpp index 10f1d1ef611d..d24700535e27 100644 --- a/clang/lib/Frontend/FrontendAction.cpp +++ b/clang/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/clang/lib/Frontend/FrontendActions.cpp b/clang/lib/Frontend/FrontendActions.cpp index d0d83076f1d1..08d91e6a5a12 100644 --- a/clang/lib/Frontend/FrontendActions.cpp +++ b/clang/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/clang/lib/Frontend/Rewrite/FrontendActions.cpp b/clang/lib/Frontend/Rewrite/FrontendActions.cpp index fa17b3e7cb3f..bcf6d215c998 100644 --- a/clang/lib/Frontend/Rewrite/FrontendActions.cpp +++ b/clang/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/clang/test/Modules/no-module-map.cpp b/clang/test/Modules/no-module-map.cpp index 08a864bc84b0..46ca38af7eed 100644 --- a/clang/test/Modules/no-module-map.cpp +++ b/clang/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