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. > 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