On 1 June 2017 at 12:53, Richard Smith <rich...@metafoo.co.uk> wrote:
> On 1 June 2017 at 11:10, Galina Kistanova <gkistan...@gmail.com> wrote: > >> Hello Richard, >> >> This commit broke tests on few of our builders: >> >> Failing Tests (2): >> Clang :: Modules/preprocess-module.cpp >> Clang :: Modules/preprocess-nested.cpp >> >> http://lab.llvm.org:8011/builders/llvm-clang-lld-x86_64-scei >> -ps4-windows10pro-fast/builds/10199 >> and >> http://lab.llvm.org:8011/builders/llvm-clang-x86_64-expensiv >> e-checks-win/builds/2819 >> >> Please have a look at this? >> > > Sure, looking. > Should be fixed in r304464. > Also I see that email notifications on these failures were sent. >> > > They certainly did not arrive here. As I've mentioned before, I have not > received any mail from any lab.llvm.org bots since early March. > > >> Thanks >> >> Galina >> >> >> On Wed, May 31, 2017 at 1:56 PM, Richard Smith via cfe-commits < >> cfe-commits@lists.llvm.org> wrote: >> >>> Author: rsmith >>> Date: Wed May 31 15:56:55 2017 >>> New Revision: 304346 >>> >>> URL: http://llvm.org/viewvc/llvm-project?rev=304346&view=rev >>> Log: >>> [modules] When compiling a preprocessed module map, look for headers >>> relative >>> to the original module map. >>> >>> Also use the path and name of the original module map when emitting that >>> information into the .pcm file. The upshot of this is that the produced >>> .pcm >>> file will track information for headers in their original locations >>> (where the >>> module was preprocessed), not relative to whatever directory the >>> preprocessed >>> module map was in when it was built. >>> >>> Modified: >>> cfe/trunk/include/clang/Basic/Module.h >>> cfe/trunk/include/clang/Lex/HeaderSearch.h >>> cfe/trunk/lib/Frontend/FrontendAction.cpp >>> cfe/trunk/lib/Lex/HeaderSearch.cpp >>> cfe/trunk/lib/Serialization/ASTWriter.cpp >>> cfe/trunk/test/Modules/preprocess-module.cpp >>> cfe/trunk/test/Modules/preprocess-nested.cpp >>> >>> Modified: cfe/trunk/include/clang/Basic/Module.h >>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/ >>> Basic/Module.h?rev=304346&r1=304345&r2=304346&view=diff >>> ============================================================ >>> ================== >>> --- cfe/trunk/include/clang/Basic/Module.h (original) >>> +++ cfe/trunk/include/clang/Basic/Module.h Wed May 31 15:56:55 2017 >>> @@ -83,6 +83,10 @@ public: >>> /// are found. >>> const DirectoryEntry *Directory; >>> >>> + /// \brief The presumed file name for the module map defining this >>> module. >>> + /// Only non-empty when building from preprocessed source. >>> + std::string PresumedModuleMapFile; >>> + >>> /// \brief The umbrella header or directory. >>> llvm::PointerUnion<const DirectoryEntry *, const FileEntry *> >>> Umbrella; >>> >>> >>> Modified: cfe/trunk/include/clang/Lex/HeaderSearch.h >>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/ >>> Lex/HeaderSearch.h?rev=304346&r1=304345&r2=304346&view=diff >>> ============================================================ >>> ================== >>> --- cfe/trunk/include/clang/Lex/HeaderSearch.h (original) >>> +++ cfe/trunk/include/clang/Lex/HeaderSearch.h Wed May 31 15:56:55 2017 >>> @@ -543,10 +543,13 @@ public: >>> /// \param Offset [inout] An offset within ID to start parsing. On >>> exit, >>> /// filled by the end of the parsed contents (either EOF or the >>> /// location of an end-of-module-map pragma). >>> - /// >>> + /// \param OriginalModuleMapFile The original path to the module map >>> file, >>> + /// used to resolve paths within the module (this is required >>> when >>> + /// building the module from preprocessed source). >>> /// \returns true if an error occurred, false otherwise. >>> bool loadModuleMapFile(const FileEntry *File, bool IsSystem, >>> - FileID ID = FileID(), unsigned *Offset = >>> nullptr); >>> + FileID ID = FileID(), unsigned *Offset = >>> nullptr, >>> + StringRef OriginalModuleMapFile = StringRef()); >>> >>> /// \brief Collect the set of all known, top-level modules. >>> /// >>> >>> Modified: cfe/trunk/lib/Frontend/FrontendAction.cpp >>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/F >>> rontendAction.cpp?rev=304346&r1=304345&r2=304346&view=diff >>> ============================================================ >>> ================== >>> --- cfe/trunk/lib/Frontend/FrontendAction.cpp (original) >>> +++ cfe/trunk/lib/Frontend/FrontendAction.cpp Wed May 31 15:56:55 2017 >>> @@ -373,10 +373,11 @@ collectModuleHeaderIncludes(const LangOp >>> return std::error_code(); >>> } >>> >>> -static bool >>> -loadModuleMapForModuleBuild(CompilerInstance &CI, StringRef Filename, >>> - bool IsSystem, bool IsPreprocessed, >>> - unsigned &Offset) { >>> +static bool loadModuleMapForModuleBuild(CompilerInstance &CI, >>> + StringRef Filename, bool >>> IsSystem, >>> + bool IsPreprocessed, >>> + std::string >>> &PresumedModuleMapFile, >>> + unsigned &Offset) { >>> auto &SrcMgr = CI.getSourceManager(); >>> HeaderSearch &HS = CI.getPreprocessor().getHeaderSearchInfo(); >>> >>> @@ -388,16 +389,15 @@ loadModuleMapForModuleBuild(CompilerInst >>> // line directives are not part of the module map syntax in general. >>> Offset = 0; >>> if (IsPreprocessed) { >>> - std::string PresumedModuleMapFile; >>> SourceLocation EndOfLineMarker = >>> ReadOriginalFileName(CI, PresumedModuleMapFile, >>> /*AddLineNote*/true); >>> if (EndOfLineMarker.isValid()) >>> Offset = CI.getSourceManager().getDecom >>> posedLoc(EndOfLineMarker).second; >>> - // FIXME: Use PresumedModuleMapFile as the MODULE_MAP_FILE in the >>> PCM. >>> } >>> >>> // Load the module map file. >>> - if (HS.loadModuleMapFile(ModuleMap, IsSystem, ModuleMapID, &Offset)) >>> + if (HS.loadModuleMapFile(ModuleMap, IsSystem, ModuleMapID, &Offset, >>> + PresumedModuleMapFile)) >>> return true; >>> >>> if (SrcMgr.getBuffer(ModuleMapID)->getBufferSize() == Offset) >>> @@ -664,15 +664,19 @@ bool FrontendAction::BeginSourceFile(Com >>> if (Input.getKind().getFormat() == InputKind::ModuleMap) { >>> CI.getLangOpts().setCompilingModule(LangOptions::CMK_ModuleMap); >>> >>> + std::string PresumedModuleMapFile; >>> unsigned OffsetToContents; >>> if (loadModuleMapForModuleBuild(CI, Input.getFile(), >>> Input.isSystem(), >>> - Input.isPreprocessed(), >>> OffsetToContents)) >>> + Input.isPreprocessed(), >>> + PresumedModuleMapFile, >>> OffsetToContents)) >>> goto failure; >>> >>> auto *CurrentModule = prepareToBuildModule(CI, Input.getFile()); >>> if (!CurrentModule) >>> goto failure; >>> >>> + CurrentModule->PresumedModuleMapFile = PresumedModuleMapFile; >>> + >>> if (OffsetToContents) >>> // If the module contents are in the same file, skip to them. >>> CI.getPreprocessor().setSkipMainFilePreamble(OffsetToContents, >>> true); >>> >>> Modified: cfe/trunk/lib/Lex/HeaderSearch.cpp >>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Lex/Header >>> Search.cpp?rev=304346&r1=304345&r2=304346&view=diff >>> ============================================================ >>> ================== >>> --- cfe/trunk/lib/Lex/HeaderSearch.cpp (original) >>> +++ cfe/trunk/lib/Lex/HeaderSearch.cpp Wed May 31 15:56:55 2017 >>> @@ -1326,14 +1326,27 @@ static const FileEntry *getPrivateModule >>> } >>> >>> bool HeaderSearch::loadModuleMapFile(const FileEntry *File, bool >>> IsSystem, >>> - FileID ID, unsigned *Offset) { >>> + FileID ID, unsigned *Offset, >>> + StringRef OriginalModuleMapFile) { >>> // Find the directory for the module. For frameworks, that may >>> require going >>> // up from the 'Modules' directory. >>> const DirectoryEntry *Dir = nullptr; >>> if (getHeaderSearchOpts().ModuleMapFileHomeIsCwd) >>> Dir = FileMgr.getDirectory("."); >>> else { >>> - Dir = File->getDir(); >>> + if (!OriginalModuleMapFile.empty()) { >>> + // We're building a preprocessed module map. Find or invent the >>> directory >>> + // that it originally occupied. >>> + Dir = FileMgr.getDirectory( >>> + llvm::sys::path::parent_path(OriginalModuleMapFile)); >>> + if (!Dir) { >>> + auto *FakeFile = FileMgr.getVirtualFile(OriginalModuleMapFile, >>> 0, 0); >>> + Dir = FakeFile->getDir(); >>> + } >>> + } else { >>> + Dir = File->getDir(); >>> + } >>> + >>> StringRef DirName(Dir->getName()); >>> if (llvm::sys::path::filename(DirName) == "Modules") { >>> DirName = llvm::sys::path::parent_path(DirName); >>> >>> Modified: cfe/trunk/lib/Serialization/ASTWriter.cpp >>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Serializat >>> ion/ASTWriter.cpp?rev=304346&r1=304345&r2=304346&view=diff >>> ============================================================ >>> ================== >>> --- cfe/trunk/lib/Serialization/ASTWriter.cpp (original) >>> +++ cfe/trunk/lib/Serialization/ASTWriter.cpp Wed May 31 15:56:55 2017 >>> @@ -1422,8 +1422,8 @@ void ASTWriter::WriteControlBlock(Prepro >>> Stream.EmitRecordWithBlob(MetadataAbbrevCode, Record, >>> getClangFullRepositoryVersion()); >>> } >>> - if (WritingModule) { >>> >>> + if (WritingModule) { >>> // Module name >>> auto Abbrev = std::make_shared<BitCodeAbbrev>(); >>> Abbrev->Add(BitCodeAbbrevOp(MODULE_NAME)); >>> @@ -1466,9 +1466,10 @@ void ASTWriter::WriteControlBlock(Prepro >>> Record.clear(); >>> >>> auto &Map = PP.getHeaderSearchInfo().getModuleMap(); >>> - >>> - // Primary module map file. >>> - AddPath(Map.getModuleMapFileForUniquing(WritingModule)->getName(), >>> Record); >>> + AddPath(WritingModule->PresumedModuleMapFile.empty() >>> + ? Map.getModuleMapFileForUniquin >>> g(WritingModule)->getName() >>> + : StringRef(WritingModule->PresumedModuleMapFile), >>> + Record); >>> >>> // Additional module map files. >>> if (auto *AdditionalModMaps = >>> >>> Modified: cfe/trunk/test/Modules/preprocess-module.cpp >>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/p >>> reprocess-module.cpp?rev=304346&r1=304345&r2=304346&view=diff >>> ============================================================ >>> ================== >>> --- cfe/trunk/test/Modules/preprocess-module.cpp (original) >>> +++ cfe/trunk/test/Modules/preprocess-module.cpp Wed May 31 15:56:55 >>> 2017 >>> @@ -14,8 +14,6 @@ >>> // RUN: FileCheck %s --input-file %t/rewrite.ii --check-prefix=CHECK >>> --check-prefix=REWRITE >>> >>> // Check that we can build a module from the preprocessed output. >>> -// FIXME: For now, we need the headers to exist. >>> -// RUN: touch %t/file.h %t/file2.h >>> // RUN: %clang_cc1 -fmodules -fmodule-name=file >>> -fmodule-file=%t/fwd.pcm -x c++-module-map-cpp-output %t/no-rewrite.ii >>> -emit-module -o %t/no-rewrite.pcm >>> // RUN: %clang_cc1 -fmodules -fmodule-name=file >>> -fmodule-file=%t/fwd.pcm -x c++-module-map-cpp-output %t/rewrite.ii >>> -emit-module -o %t/rewrite.pcm >>> >>> @@ -27,6 +25,8 @@ >>> // Check the module we built works. >>> // RUN: %clang_cc1 -fmodules -fmodule-file=%t/no-rewrite.pcm %s -I%t >>> -verify -fno-modules-error-recovery >>> // RUN: %clang_cc1 -fmodules -fmodule-file=%t/rewrite.pcm %s -I%t >>> -verify -fno-modules-error-recovery -DREWRITE >>> +// RUN: %clang_cc1 -fmodules -fmodule-file=%t/no-rewrite.pcm %s -I%t >>> -verify -fno-modules-error-recovery -DINCLUDE -I%S/Inputs/preprocess >>> +// RUN: %clang_cc1 -fmodules -fmodule-file=%t/rewrite.pcm %s -I%t >>> -verify -fno-modules-error-recovery -DREWRITE -DINCLUDE >>> -I%S/Inputs/preprocess >>> >>> >>> // == module map >>> @@ -102,7 +102,11 @@ __FILE *a; // expected-error {{declarati >>> // expected-n...@no-rewrite.ii:1 {{here}} >>> #endif >>> >>> +#ifdef INCLUDE >>> +#include "file.h" >>> +#else >>> #pragma clang module import file >>> +#endif >>> >>> FILE *b; >>> -int x = file2; >>> +int x = file2; // ok, found in file2.h, even under -DINCLUDE >>> >>> Modified: cfe/trunk/test/Modules/preprocess-nested.cpp >>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/p >>> reprocess-nested.cpp?rev=304346&r1=304345&r2=304346&view=diff >>> ============================================================ >>> ================== >>> --- cfe/trunk/test/Modules/preprocess-nested.cpp (original) >>> +++ cfe/trunk/test/Modules/preprocess-nested.cpp Wed May 31 15:56:55 >>> 2017 >>> @@ -8,8 +8,6 @@ >>> // RUN: FileCheck %s --input-file %t/rewrite.ii --check-prefix=CHECK >>> --check-prefix=REWRITE >>> >>> // Check that we can build a module from the preprocessed output. >>> -// FIXME: For now, the files need to exist. >>> -// RUN: touch %t/a.h %t/b.h %t/c.h >>> // RUN: %clang_cc1 -fmodules -fmodules-local-submodule-visibility >>> -fmodule-name=nested -x c++-module-map-cpp-output %t/no-rewrite.ii >>> -emit-module -o %t/no-rewrite.pcm >>> // RUN: %clang_cc1 -fmodules -fmodules-local-submodule-visibility >>> -fmodule-name=nested -x c++-module-map-cpp-output %t/rewrite.ii >>> -emit-module -o %t/rewrite.pcm >>> >>> >>> >>> _______________________________________________ >>> cfe-commits mailing list >>> cfe-commits@lists.llvm.org >>> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits >>> >> >> >
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits