r181489 - [modules] When building a module, make sure we don't serialize out HeaderFileInfo for headers not belonging to the module.
Argyrios Kyrtzidis
akyrtzi at gmail.com
Wed May 15 09:48:40 PDT 2013
On May 15, 2013, at 5:28 AM, NAKAMURA Takumi <geek4civic at gmail.com> wrote:
> Argyrios,
>
> Could you let the test avoid <float.h>, for now, and use another system header?
> <float.h> has an issue around #include_next for mingw32.
>
> FYI: mingw-gcc searches /mingw/include prior to $(GCC_LIB)/include.
> mingw32's <float.h> assumes compiler's <float.h> with #include_next <float.h>.
> I wonder what would be better solution.
Does adding a darwin triple fix the test ?
>
> ...Takumi
>
> 2013/5/9 Argyrios Kyrtzidis <akyrtzi at gmail.com>:
>> Author: akirtzidis
>> Date: Wed May 8 18:46:46 2013
>> New Revision: 181489
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=181489&view=rev
>> Log:
>> [modules] When building a module, make sure we don't serialize out HeaderFileInfo for headers not belonging to the module.
>>
>> After r180934 we may initiate module map parsing for modules not related to the module what we are building,
>> make sure we ignore the header file info of headers from such modules.
>>
>> First part of rdar://13840148
>>
>> Added:
>> cfe/trunk/test/Modules/self-import-header/
>> cfe/trunk/test/Modules/self-import-header/af.framework/
>> cfe/trunk/test/Modules/self-import-header/af.framework/Headers/
>> cfe/trunk/test/Modules/self-import-header/af.framework/Headers/a1.h
>> cfe/trunk/test/Modules/self-import-header/af.framework/Headers/a2.h
>> cfe/trunk/test/Modules/self-import-header/af.framework/module.map
>> cfe/trunk/test/Modules/self-import-header/depend_builtin/
>> cfe/trunk/test/Modules/self-import-header/depend_builtin/h1.h
>> cfe/trunk/test/Modules/self-import-header/depend_builtin/module.map
>> cfe/trunk/test/Modules/self-import-header/test.m
>> Modified:
>> cfe/trunk/include/clang/Lex/HeaderSearch.h
>> cfe/trunk/include/clang/Lex/ModuleMap.h
>> cfe/trunk/lib/Lex/HeaderSearch.cpp
>> cfe/trunk/lib/Lex/ModuleMap.cpp
>> cfe/trunk/lib/Serialization/ASTWriter.cpp
>>
>> Modified: cfe/trunk/include/clang/Lex/HeaderSearch.h
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Lex/HeaderSearch.h?rev=181489&r1=181488&r2=181489&view=diff
>> ==============================================================================
>> --- cfe/trunk/include/clang/Lex/HeaderSearch.h (original)
>> +++ cfe/trunk/include/clang/Lex/HeaderSearch.h Wed May 8 18:46:46 2013
>> @@ -53,6 +53,9 @@ struct HeaderFileInfo {
>>
>> /// \brief Whether this header is part of a module.
>> unsigned isModuleHeader : 1;
>> +
>> + /// \brief Whether this header is part of the module that we are building.
>> + unsigned isCompilingModuleHeader : 1;
>>
>> /// \brief Whether this structure is considered to already have been
>> /// "resolved", meaning that it was loaded from the external source.
>> @@ -93,8 +96,8 @@ struct HeaderFileInfo {
>>
>> HeaderFileInfo()
>> : isImport(false), isPragmaOnce(false), DirInfo(SrcMgr::C_User),
>> - External(false), isModuleHeader(false), Resolved(false),
>> - IndexHeaderMapHeader(false),
>> + External(false), isModuleHeader(false), isCompilingModuleHeader(false),
>> + Resolved(false), IndexHeaderMapHeader(false),
>> NumIncludes(0), ControllingMacroID(0), ControllingMacro(0) {}
>>
>> /// \brief Retrieve the controlling macro for this header file, if
>> @@ -405,7 +408,7 @@ public:
>> }
>>
>> /// \brief Mark the specified file as part of a module.
>> - void MarkFileModuleHeader(const FileEntry *File);
>> + void MarkFileModuleHeader(const FileEntry *File, bool IsCompiledModuleHeader);
>>
>> /// \brief Increment the count for the number of times the specified
>> /// FileEntry has been entered.
>>
>> Modified: cfe/trunk/include/clang/Lex/ModuleMap.h
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Lex/ModuleMap.h?rev=181489&r1=181488&r2=181489&view=diff
>> ==============================================================================
>> --- cfe/trunk/include/clang/Lex/ModuleMap.h (original)
>> +++ cfe/trunk/include/clang/Lex/ModuleMap.h Wed May 8 18:46:46 2013
>> @@ -52,6 +52,9 @@ class ModuleMap {
>> /// These are always simple C language options.
>> LangOptions MMapLangOpts;
>>
>> + // The module that we are building; related to \c LangOptions::CurrentModule.
>> + Module *CompilingModule;
>> +
>> /// \brief The top-level modules that are known.
>> llvm::StringMap<Module *> Modules;
>>
>>
>> Modified: cfe/trunk/lib/Lex/HeaderSearch.cpp
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Lex/HeaderSearch.cpp?rev=181489&r1=181488&r2=181489&view=diff
>> ==============================================================================
>> --- cfe/trunk/lib/Lex/HeaderSearch.cpp (original)
>> +++ cfe/trunk/lib/Lex/HeaderSearch.cpp Wed May 8 18:46:46 2013
>> @@ -866,12 +866,14 @@ bool HeaderSearch::isFileMultipleInclude
>> HFI.ControllingMacro || HFI.ControllingMacroID;
>> }
>>
>> -void HeaderSearch::MarkFileModuleHeader(const FileEntry *FE) {
>> +void HeaderSearch::MarkFileModuleHeader(const FileEntry *FE,
>> + bool isCompilingModuleHeader) {
>> if (FE->getUID() >= FileInfo.size())
>> FileInfo.resize(FE->getUID()+1);
>>
>> HeaderFileInfo &HFI = FileInfo[FE->getUID()];
>> HFI.isModuleHeader = true;
>> + HFI.isCompilingModuleHeader = isCompilingModuleHeader;
>> }
>>
>> void HeaderSearch::setHeaderFileInfoForUID(HeaderFileInfo HFI, unsigned UID) {
>>
>> Modified: cfe/trunk/lib/Lex/ModuleMap.cpp
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Lex/ModuleMap.cpp?rev=181489&r1=181488&r2=181489&view=diff
>> ==============================================================================
>> --- cfe/trunk/lib/Lex/ModuleMap.cpp (original)
>> +++ cfe/trunk/lib/Lex/ModuleMap.cpp Wed May 8 18:46:46 2013
>> @@ -87,7 +87,7 @@ ModuleMap::ModuleMap(FileManager &FileMg
>> const LangOptions &LangOpts, const TargetInfo *Target,
>> HeaderSearch &HeaderInfo)
>> : LangOpts(LangOpts), Target(Target), HeaderInfo(HeaderInfo),
>> - BuiltinIncludeDir(0)
>> + BuiltinIncludeDir(0), CompilingModule(0)
>> {
>> IntrusiveRefCntPtr<DiagnosticIDs> DiagIDs(new DiagnosticIDs);
>> Diags = IntrusiveRefCntPtr<DiagnosticsEngine>(
>> @@ -388,8 +388,13 @@ ModuleMap::findOrCreateModule(StringRef
>> // Create a new module with this name.
>> Module *Result = new Module(Name, SourceLocation(), Parent, IsFramework,
>> IsExplicit);
>> - if (!Parent)
>> + if (!Parent) {
>> Modules[Name] = Result;
>> + if (!LangOpts.CurrentModule.empty() && !CompilingModule &&
>> + Name == LangOpts.CurrentModule) {
>> + CompilingModule = Result;
>> + }
>> + }
>> return std::make_pair(Result, true);
>> }
>>
>> @@ -605,7 +610,8 @@ void ModuleMap::addHeader(Module *Mod, c
>> Mod->ExcludedHeaders.push_back(Header);
>> } else {
>> Mod->Headers.push_back(Header);
>> - HeaderInfo.MarkFileModuleHeader(Header);
>> + bool isCompilingModuleHeader = Mod->getTopLevelModule() == CompilingModule;
>> + HeaderInfo.MarkFileModuleHeader(Header, isCompilingModuleHeader);
>> }
>> Headers[Header] = KnownHeader(Mod, Excluded);
>> }
>>
>> Modified: cfe/trunk/lib/Serialization/ASTWriter.cpp
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Serialization/ASTWriter.cpp?rev=181489&r1=181488&r2=181489&view=diff
>> ==============================================================================
>> --- cfe/trunk/lib/Serialization/ASTWriter.cpp (original)
>> +++ cfe/trunk/lib/Serialization/ASTWriter.cpp Wed May 8 18:46:46 2013
>> @@ -1542,6 +1542,8 @@ void ASTWriter::WriteHeaderSearch(const
>> const HeaderFileInfo &HFI = HS.getFileInfo(File);
>> if (HFI.External && Chain)
>> continue;
>> + if (HFI.isModuleHeader && !HFI.isCompilingModuleHeader)
>> + continue;
>>
>> // Turn the file name into an absolute path, if it isn't already.
>> const char *Filename = File->getName();
>>
>> Added: cfe/trunk/test/Modules/self-import-header/af.framework/Headers/a1.h
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/self-import-header/af.framework/Headers/a1.h?rev=181489&view=auto
>> ==============================================================================
>> --- cfe/trunk/test/Modules/self-import-header/af.framework/Headers/a1.h (added)
>> +++ cfe/trunk/test/Modules/self-import-header/af.framework/Headers/a1.h Wed May 8 18:46:46 2013
>> @@ -0,0 +1,4 @@
>> + at import DepBuiltin;
>> +
>> + at interface Foo
>> + at end
>>
>> Added: cfe/trunk/test/Modules/self-import-header/af.framework/Headers/a2.h
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/self-import-header/af.framework/Headers/a2.h?rev=181489&view=auto
>> ==============================================================================
>> --- cfe/trunk/test/Modules/self-import-header/af.framework/Headers/a2.h (added)
>> +++ cfe/trunk/test/Modules/self-import-header/af.framework/Headers/a2.h Wed May 8 18:46:46 2013
>> @@ -0,0 +1 @@
>> +#import "a1.h"
>>
>> Added: cfe/trunk/test/Modules/self-import-header/af.framework/module.map
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/self-import-header/af.framework/module.map?rev=181489&view=auto
>> ==============================================================================
>> --- cfe/trunk/test/Modules/self-import-header/af.framework/module.map (added)
>> +++ cfe/trunk/test/Modules/self-import-header/af.framework/module.map Wed May 8 18:46:46 2013
>> @@ -0,0 +1,4 @@
>> +framework module af {
>> + header "a1.h"
>> + header "a2.h"
>> +}
>>
>> Added: cfe/trunk/test/Modules/self-import-header/depend_builtin/h1.h
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/self-import-header/depend_builtin/h1.h?rev=181489&view=auto
>> ==============================================================================
>> --- cfe/trunk/test/Modules/self-import-header/depend_builtin/h1.h (added)
>> +++ cfe/trunk/test/Modules/self-import-header/depend_builtin/h1.h Wed May 8 18:46:46 2013
>> @@ -0,0 +1 @@
>> +#include <float.h>
>>
>> Added: cfe/trunk/test/Modules/self-import-header/depend_builtin/module.map
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/self-import-header/depend_builtin/module.map?rev=181489&view=auto
>> ==============================================================================
>> --- cfe/trunk/test/Modules/self-import-header/depend_builtin/module.map (added)
>> +++ cfe/trunk/test/Modules/self-import-header/depend_builtin/module.map Wed May 8 18:46:46 2013
>> @@ -0,0 +1,5 @@
>> +module DepBuiltin {
>> +header "h1.h"
>> + export *
>> +}
>> +
>>
>> Added: cfe/trunk/test/Modules/self-import-header/test.m
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/self-import-header/test.m?rev=181489&view=auto
>> ==============================================================================
>> --- cfe/trunk/test/Modules/self-import-header/test.m (added)
>> +++ cfe/trunk/test/Modules/self-import-header/test.m Wed May 8 18:46:46 2013
>> @@ -0,0 +1,7 @@
>> +// rdar://13840148
>> +
>> +// RUN: rm -rf %t
>> +// RUN: %clang -fsyntax-only -isysroot %S/../Inputs/System/usr/include -fmodules -fmodules-cache-path=%t \
>> +// RUN: -F %S -I %S %s -D__need_wint_t -Werror=implicit-function-declaration
>> +
>> + at import af;
>>
>>
>> _______________________________________________
>> cfe-commits mailing list
>> cfe-commits at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
More information about the cfe-commits
mailing list